Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Interviewfrage 1: Der Unterschied zwischen Threads und Prozessen (Coroutinen werden übrigens erwähnt)

PHP-Interviewfrage 1: Der Unterschied zwischen Threads und Prozessen (Coroutinen werden übrigens erwähnt)

不言
不言Original
2018-04-18 09:28:095798Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Unterschied zwischen Threads und Prozessen in PHP-Interviewfrage 1 (übrigens werden Coroutinen erwähnt). Jetzt kann ich es mit Ihnen teilen dazu

1. Was ist ein Prozess > und andere Ressourcen. Ein Prozess umfasst im Allgemeinen

Befehlssatz und Systemressourcen

, wobei der Befehlssatz Ihr Code ist und sich Systemressourcen auf CPU, Speicher, E/A usw. beziehen.

Ein Prozess ist ein dynamischer Ausführungsprozess eines Programms in einem Datensatz. Er kann einfach als „das ausführende Programm“ verstanden werden. Er ist eine unabhängige Einheit der CPU-Ressourcenzuweisung und -planung .

Ein Prozess besteht im Allgemeinen aus drei Teilen: Programm, Datensatz und Prozesssteuerungsblock . Das von uns geschriebene Programm wird verwendet, um zu beschreiben, welche Funktionen der Prozess ausführen muss und wie er ausgeführt wird. Der Datensatz besteht aus den Ressourcen, die das Programm während der Ausführung verwenden muss Beschreiben Sie den Ausführungsänderungsprozess des Prozesses und des Systems. Es kann zur Steuerung und Verwaltung von Prozessen verwendet werden. Es ist das einzige Zeichen dafür, dass das System die Existenz eines Prozesses erkennt. Die Einschränkung von Prozessen besteht darin, dass der Aufwand für das Erstellen, Löschen und Wechseln relativ hoch ist. 2. Was ist ein Thread?

Ein Thread ist ein Ausführungsablauf eines Prozesses. Er ist ein Teil des Prozesses und eine kleinere Einheit, die unabhängig ausgeführt wird als der Prozess.

Erklären Sie: Der Prozess weist zwei Merkmale auf: Das eine ist der Ressourcenbesitz und das andere die Planung der Ausführung (Befehlssatz). Threads sind Teil der Planung der Ausführung und beziehen sich auf den Pfad der Prozessausführung, der auch als Programmausführungsfluss bezeichnet wird. Threads werden manchmal als leichte Prozesse bezeichnet. Threads sind ein Konzept, das nach Prozessen entwickelt wurde. Ein Thread wird auch als Lightweight-Prozess bezeichnet. Er ist eine grundlegende CPU-Ausführungseinheit und die kleinste Einheit im Programmausführungsprozess. Er besteht aus Thread-ID, Programmzähler, Registersatz und Stapel. Ein Prozess kann mehrere Threads enthalten.
Der Vorteil von Threads besteht darin, dass sie den Overhead der gleichzeitigen Ausführung von Programmen reduzieren und die Parallelitätsleistung des Betriebssystems verbessern. Der Nachteil besteht darin, dass Threads keine eigenen Systemressourcen haben und nur über Ressourcen verfügen, die zur Laufzeit unerlässlich sind. aber jeder Thread im selben Prozess Threads können die Systemressourcen teilen, die dem Prozess gehören. Wenn der Prozess mit einem Workshop verglichen wird, dann sind die Threads wie Arbeiter im Workshop. Für einige exklusive Ressourcen gibt es jedoch einen Sperrmechanismus, und eine unsachgemäße Handhabung kann zu einem „Deadlock“ führen. 3. Was ist eine Coroutine?

Eine Coroutine ist ein leichter Thread im Benutzermodus, der auch als Mikro-Thread bezeichnet wird vom Benutzer gesteuert. Normalerweise werden

Koroutinen und Unterroutinen

(Funktionen) verglichen.

Ein Unterprogrammaufruf hat immer einen Eingang und kehrt einmal zurück. Nach dem Verlassen ist die Ausführung des Unterprogramms abgeschlossen.
Der Startpunkt der Coroutine ist der erste Einstiegspunkt. In der Coroutine liegt der nächste Einstiegspunkt nach dem Rückkehrpunkt. In Python können Coroutinen über yield andere Coroutinen aufrufen. Die Beziehung zwischen den Coroutinen, die Ausführungsrechte über die Yield-Methode übertragen, ist nicht die Beziehung zwischen dem Aufrufer und dem Angerufenen, sondern ist symmetrisch und gleich, und sie arbeiten zusammen, um die Aufgabe durch gegenseitige Zusammenarbeit zu erledigen. Der allgemeine Ablauf ist wie folgt:

Im ersten Schritt beginnt Coroutine A mit der Ausführung.

Im zweiten Schritt wird Coroutine A zur Hälfte ausgeführt und geht in eine Pause. Das Ausführungsrecht wird durch den yield-Befehl an Coroutine B übertragen. Der dritte Schritt: (nach einer gewissen Zeit) gibt Coroutine B die Ausführungsrechte zurück. Im vierten Schritt nimmt Coroutine A die Ausführung wieder auf.

Das Merkmal von Coroutine ist, dass es in einem Thread ausgeführt wird. Seine Vorteile spiegeln sich in Folgendem wider:

* Die

Ausführungseffizienz von Coroutine ist sehr hoch

. Da das Wechseln von Unterprogrammen kein Thread-Wechsel ist, sondern vom Programm selbst gesteuert wird, entsteht beim Thread-Wechsel kein Overhead. Im Vergleich zum Multithreading sind die Leistungsvorteile von Coroutinen umso offensichtlicher, je größer die Anzahl der Threads ist. * Coroutinen erfordern keine Multithread-Sperrmechanismen. Es ist nicht erforderlich, die gemeinsam genutzten Ressourcen in der Coroutine zu sperren, Sie müssen lediglich den Status ermitteln. Tipps: Der einfachste Weg, eine Multi-Core-CPU zu nutzen, ist Multi-Process + Coroutine, die nicht nur Multi-Core voll ausnutzt, sondern auch die hohe Effizienz von Coroutine voll ausnutzt und eine extrem hohe Leistung erzielen kann .

4. Die Beziehung zwischen Prozessen und Threads

Ein Prozess ist wie ein Vermieter mit Land (Systemressourcen) und ein Thread ist wie ein Mieter (Thread, der den Farming-Prozess ausführt). Jeder Vermieter (Prozess) benötigt nur einen arbeitenden Mieter (Thread).
Prozess – die kleinste Einheit der Ressourcenzuweisung, relativ robust, Abstürze wirken sich im Allgemeinen nicht auf andere Prozesse aus, aber das Wechseln von Prozessen verbraucht Ressourcen und ist weniger effizient.
Thread – die kleinste Einheit der Programmausführung. Es gibt keinen unabhängigen Adressraum. Wenn ein Thread ausfällt, stirbt möglicherweise der gesamte Prozess ab, aber es spart Ressourcen und weist eine hohe Switching-Effizienz auf.

5. Gemeinsame Prozesse und Threads in der PHP-Programmierung

1. In Webanwendungen erstellen wir jedes Mal einen PHP-Prozess , und natürlich erstellen wir auch mindestens einen ein PHP-Thread.
2. PHP verwendet pcntl für die Multiprozessprogrammierung
3. PHP verwendet pthreads für die Multithreadprogrammierung
4 hat nur einen Thread , und jeder Thread kann den Zugriff mehrerer Clients verarbeiten 5. PHP-FPM verwendet das
Multiprozessmodell , jeder Prozess Es gibt nur einen Thread und jeder Thread kann nur einen Clientzugriff verarbeiten . 6. Apache kann ein Multiprozessmodell oder ein Multithreading-Modell verwenden, je nachdem, welches SAPI verwendet wird.
Der Prozess ist die kleinste Einheit der
CPU-Ressourcenzuweisung Der Thread ist Die kleinste Einheit der CPU-Planung

1. Was ist ein Prozess?

Ein Prozess ist eine

Instanz der Programmausführung kann einer CPU und einem Speicher und anderen Ressourcen zugewiesen werden. Ein Prozess umfasst im Allgemeinen Befehlssatz und Systemressourcen , wobei der Befehlssatz Ihr Code ist und sich Systemressourcen auf CPU, Speicher, E/A usw. beziehen.

Ein Prozess ist ein dynamischer Ausführungsprozess eines Programms in einem Datensatz. Er kann einfach als „das ausführende Programm“ verstanden werden. Er ist eine unabhängige Einheit der CPU-Ressourcenzuweisung und -planung .

Ein Prozess besteht im Allgemeinen aus drei Teilen: Programm, Datensatz und Prozesssteuerungsblock . Das von uns geschriebene Programm wird verwendet, um zu beschreiben, welche Funktionen der Prozess ausführen muss und wie er ausgeführt wird. Der Datensatz besteht aus den Ressourcen, die das Programm während der Ausführung verwenden muss Beschreiben Sie den Ausführungsänderungsprozess des Prozesses und des Systems. Es kann zur Steuerung und Verwaltung von Prozessen verwendet werden. Es ist das einzige Zeichen dafür, dass das System die Existenz eines Prozesses erkennt.
Die Einschränkung von Prozessen besteht darin, dass der Aufwand für das Erstellen, Löschen und Wechseln relativ hoch ist. 2. Was ist ein Thread?

Ein Thread ist ein Ausführungsablauf eines Prozesses. Er ist ein Teil des Prozesses und eine kleinere Einheit, die unabhängig ausgeführt wird als der Prozess.

Erklären Sie: Der Prozess weist zwei Merkmale auf: Das eine ist der Ressourcenbesitz und das andere die Planung der Ausführung (Befehlssatz). Threads sind Teil der Planung der Ausführung und beziehen sich auf den Pfad der Prozessausführung, der auch als Programmausführungsfluss bezeichnet wird. Threads werden manchmal als leichte Prozesse bezeichnet.

Threads sind ein Konzept, das nach Prozessen entwickelt wurde. Ein Thread wird auch als Lightweight-Prozess bezeichnet. Er ist eine grundlegende CPU-Ausführungseinheit und die kleinste Einheit im Programmausführungsprozess. Er besteht aus Thread-ID, Programmzähler, Registersatz und Stapel. Ein Prozess kann mehrere Threads enthalten.
Der Vorteil von Threads besteht darin, dass sie den Overhead der gleichzeitigen Ausführung von Programmen reduzieren und die Parallelitätsleistung des Betriebssystems verbessern. Der Nachteil besteht darin, dass Threads keine eigenen Systemressourcen haben und nur über Ressourcen verfügen, die zur Laufzeit unerlässlich sind. aber jeder Thread im selben Prozess Threads können die Systemressourcen teilen, die dem Prozess gehören. Wenn der Prozess mit einem Workshop verglichen wird, dann sind die Threads wie Arbeiter im Workshop. Für einige exklusive Ressourcen gibt es jedoch einen Sperrmechanismus, und eine unsachgemäße Handhabung kann zu einem „Deadlock“ führen.

3. Was ist eine Coroutine? Eine Coroutine ist ein leichter Thread im Benutzermodus, der auch als Mikro-Thread bezeichnet wird vom Benutzer gesteuert. Normalerweise werden
Koroutinen und Unterroutinen

(Funktionen) verglichen.

Ein Unterprogrammaufruf hat immer einen Eingang und kehrt einmal zurück. Nach dem Verlassen ist die Ausführung des Unterprogramms abgeschlossen.

Der Startpunkt der Coroutine ist der erste Einstiegspunkt. In der Coroutine liegt der nächste Einstiegspunkt nach dem Rückkehrpunkt. In Python können Coroutinen über yield andere Coroutinen aufrufen. Die Beziehung zwischen den Coroutinen, die Ausführungsrechte über die Yield-Methode übertragen, ist nicht die Beziehung zwischen dem Aufrufer und dem Angerufenen, sondern ist symmetrisch und gleich, und sie arbeiten zusammen, um die Aufgabe durch gegenseitige Zusammenarbeit zu erledigen. Der allgemeine Ablauf ist wie folgt:

Im ersten Schritt beginnt Coroutine A mit der Ausführung. Im zweiten Schritt wird Coroutine A zur Hälfte ausgeführt und geht in eine Pause. Das Ausführungsrecht wird durch den yield-Befehl an Coroutine B übertragen. Der dritte Schritt: (nach einer gewissen Zeit) gibt Coroutine B die Ausführungsrechte zurück.
Im vierten Schritt nimmt Coroutine A die Ausführung wieder auf.

Das Merkmal von Coroutine ist, dass es in einem Thread ausgeführt wird. Seine Vorteile spiegeln sich in Folgendem wider:
* Die
Ausführungseffizienz von Coroutine ist sehr hoch
. Da das Wechseln von Unterprogrammen kein Thread-Wechsel ist, sondern vom Programm selbst gesteuert wird, entsteht beim Thread-Wechsel kein Overhead. Im Vergleich zum Multithreading sind die Leistungsvorteile von Coroutinen umso offensichtlicher, je größer die Anzahl der Threads ist.

* Coroutinen erfordern keine Multithread-Sperrmechanismen. Es ist nicht erforderlich, die gemeinsam genutzten Ressourcen in der Coroutine zu sperren, Sie müssen lediglich den Status ermitteln.

Tipps: Der einfachste Weg, eine Multi-Core-CPU zu nutzen, ist Multi-Process + Coroutine, die nicht nur Multi-Core voll ausnutzt, sondern auch die hohe Effizienz von Coroutine voll ausnutzt und eine extrem hohe Leistung erzielen kann .

4. Die Beziehung zwischen Prozessen und Threads

Ein Prozess ist wie ein Vermieter mit Land (Systemressourcen) und ein Thread ist wie ein Mieter (Thread, der den Farming-Prozess ausführt). Jeder Vermieter (Prozess) benötigt nur einen arbeitenden Mieter (Thread).
Prozess – die kleinste Einheit der Ressourcenzuweisung, relativ robust, Abstürze wirken sich im Allgemeinen nicht auf andere Prozesse aus, aber das Wechseln von Prozessen verbraucht Ressourcen und ist weniger effizient.
Thread – die kleinste Einheit der Programmausführung. Es gibt keinen unabhängigen Adressraum. Wenn ein Thread ausfällt, stirbt möglicherweise der gesamte Prozess ab, aber es spart Ressourcen und weist eine hohe Switching-Effizienz auf.

5. Gemeinsame Prozesse und Threads in der PHP-Programmierung

1. In Webanwendungen erstellen wir jedes Mal einen PHP-Prozess , und natürlich werden wir das auch tun Erstellen Sie mindestens einen PHP-Thread.
2. PHP verwendet pcntl für die Multiprozessprogrammierung
3. PHP verwendet pthreads für die Multithreadprogrammierung
4 hat nur einen Thread , und jeder Thread kann den Zugriff mehrerer Clients verarbeiten 5. PHP-FPM verwendet das
Multiprozessmodell , jeder Prozess Es gibt nur einen Thread und jeder Thread kann nur einen Clientzugriff verarbeiten . 6. Apache kann ein Multiprozessmodell oder ein Multithreading-Modell verwenden, je nachdem, welches SAPI verwendet wird
7. Der Prozess ist die kleinste Einheit der
CPU-Ressourcenzuweisung Der Thread ist Die kleinste Einheit der CPU-Planung

Verwandte Empfehlungen:

Eine Zusammenfassung technischer Fragen, die in PHP-Interviews gestellt werden können


Das obige ist der detaillierte Inhalt vonPHP-Interviewfrage 1: Der Unterschied zwischen Threads und Prozessen (Coroutinen werden übrigens erwähnt). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn