Какова цель ветвления ()?

В зависимости от того, что вы на самом деле делаете, вы можете рассчитывать на то, что инфраструктура будет обрабатывать для вас детали порядка байтов, используя IPAddress.HostToNetworkOrder и соответствующую функцию реверса. Затем просто используйте класс BitConverter для перехода к и из байтовых массивов.

80
задан senfo 12 June 2009 в 14:05
поделиться

8 ответов

fork () используется для порождения дочернего процесса. Обычно он используется в ситуациях, подобных многопоточности, но есть различия. В отличие от потоков, fork () создает целые отдельные процессы, что означает, что потомок и родитель, хотя они являются прямыми копиями друг друга в момент вызова fork () , они полностью разделены, ни один из них не может получить доступ к пространству памяти другого (без перехода к обычному проблемы с доступом к памяти другой программы).

fork () все еще используется некоторыми серверными приложениями, в основном теми, которые работают с правами root на машине * NIX, которая сбрасывает разрешения перед обработкой пользовательских запросов. Есть еще несколько вариантов использования, но сейчас в основном люди перешли на многопоточность.

fork () по-прежнему используется некоторыми серверными приложениями, в основном теми, которые работают с правами root на машине * NIX, которые сбрасывают разрешения перед обработкой пользовательских запросов. Есть еще несколько вариантов использования, но сейчас в основном люди перешли на многопоточность.

fork () по-прежнему используется некоторыми серверными приложениями, в основном теми, которые работают с правами root на машине * NIX, которые сбрасывают разрешения перед обработкой пользовательских запросов. Есть еще несколько вариантов использования, но сейчас в основном люди перешли на многопоточность.

1
ответ дан 24 November 2019 в 09:54
поделиться

Многопроцессорность играет центральную роль в вычислениях. Например, ваш IE или Firefox может создать процесс для загрузки файла для вас, пока вы все еще просматриваете Интернет. Или, пока вы распечатываете документ в текстовом редакторе, вы все равно можете просматривать разные страницы и по-прежнему редактировать их.

3
ответ дан 24 November 2019 в 09:54
поделиться

fork () - это то, как вы создаете новые процессы в Unix. Когда вы вызываете fork , вы создаете копию своего собственного процесса, имеющего собственное адресное пространство . Это позволяет нескольким задачам выполняться независимо друг от друга, как если бы каждая из них имела полную память машины.

Вот несколько примеров использования fork :

  1. Ваша оболочка использует fork для запуска программ, которые вы вызываете из командной строки.
  2. Веб-серверы, такие как apache , используют fork для создания нескольких серверных процессов, каждый из который обрабатывает запросы в собственном адресном пространстве. Если один умирает или утекает память, другие не пострадают, поэтому он функционирует как механизм отказоустойчивости.
  3. Google Chrome использует fork для обработки каждой страницы в отдельном процессе. Это предотвратит сбой в работе всего браузера клиентским кодом на одной странице.
  4. fork используется для порождения процессов в некоторых параллельных программах (например, написанных с использованием MPI ). Обратите внимание, что это отличается от использования потоков , которые не имеют собственного адресного пространства и существуют внутри процесса.
  5. Языки сценариев используют fork косвенно для запускать дочерние процессы. Например, каждый раз, когда вы используете команду типа subprocess.Popen в Python, вы разветвляете дочерний процесс и читаете его вывод. Это позволяет программам работать вместе.

Типичное использование fork в оболочке может выглядеть примерно так:

int child_process_id = fork();
if (child_process_id) {
    // Fork returns a valid pid in the parent process.  Parent executes this.

    // wait for the child process to complete
    waitpid(child_process_id, ...);  // omitted extra args for brevity

    // child process finished!
} else {
    // Fork returns 0 in the child process.  Child executes this.

    // new argv array for the child process
    const char *argv[] = {"arg1", "arg2", "arg3", NULL};

    // now start executing some other program
    exec("/path/to/a/program", argv);
}

Оболочка порождает дочерний процесс с помощью exec и ожидает его завершения, а затем продолжает свое собственное выполнение. Обратите внимание, что вам не обязательно использовать fork таким образом. Вы всегда можете запустить множество дочерних процессов, как это может делать параллельная программа, и каждый из них может запускать программу одновременно. По сути, каждый раз, когда вы создаете новые процессы в системе Unix, вы используете fork () . Эквивалент для Windows можно найти в CreateProcess .

Если вам нужно больше примеров и более подробное объяснение, Википедия содержит достойное резюме. И вот несколько слайдов о том, как процессы, потоки и параллелизм работают в современных операционных системах.

Обратите внимание, что вам не обязательно использовать fork таким образом. Вы всегда можете запустить множество дочерних процессов, как это может делать параллельная программа, и каждый из них может запускать программу одновременно. По сути, каждый раз, когда вы создаете новые процессы в системе Unix, вы используете fork () . Эквивалент для Windows можно найти в CreateProcess .

Если вам нужно больше примеров и более подробное объяснение, Википедия содержит достойное резюме. И вот несколько слайдов о том, как процессы, потоки и параллелизм работают в современных операционных системах.

Обратите внимание, что вам не обязательно использовать fork таким образом. Вы всегда можете запустить множество дочерних процессов, как это может делать параллельная программа, и каждый из них может запускать программу одновременно. По сути, каждый раз, когда вы создаете новые процессы в системе Unix, вы используете fork () . Эквивалент для Windows можно найти в CreateProcess .

Если вам нужно больше примеров и более подробное объяснение, Википедия содержит достойное резюме. И вот несколько слайдов о том, как процессы, потоки и параллелизм работают в современных операционных системах.

re с помощью fork () . Эквивалент для Windows можно найти в CreateProcess .

Если вам нужно больше примеров и более подробное объяснение, Википедия содержит достойное резюме. И вот несколько слайдов о том, как процессы, потоки и параллелизм работают в современных операционных системах.

re с помощью fork () . Эквивалент для Windows можно найти в CreateProcess .

Если вам нужно больше примеров и более подробное объяснение, Википедия содержит достойное резюме. И вот несколько слайдов о том, как процессы, потоки и параллелизм работают в современных операционных системах.

103
ответ дан 24 November 2019 в 09:54
поделиться

fork () создаст новый дочерний процесс, идентичный родительскому. Таким образом, все, что вы запускаете в коде после этого, будет выполняться обоими процессами - очень полезно, если у вас, например, есть сервер, и вы хотите обрабатывать несколько запросов.

6
ответ дан 24 November 2019 в 09:54
поделиться

Вы, вероятно, не Нет необходимости использовать fork в повседневном программировании, если вы пишете приложения.

Даже если вы действительно хотите, чтобы ваша программа запускала другую программу для выполнения некоторой задачи, существуют другие более простые интерфейсы, которые используют fork за кулисами, например как «система» в C и perl.

Например, если вы хотите, чтобы ваше приложение запускало другую программу, такую ​​как bc, для выполнения за вас некоторых вычислений, вы можете использовать «система» для ее запуска. Система выполняет «вилку» для создания нового процесса, затем «exec», чтобы превратить этот процесс в bc. После завершения bc система возвращает управление вашей программе.

Вы также можете запускать другие программы асинхронно, но я не могу вспомнить, как это сделать.

4
ответ дан 24 November 2019 в 09:54
поделиться

fork () в основном используется для создания дочернего процесса для процесса, в котором вы вызываете эту функцию. Всякий раз, когда вы вызываете fork (), он возвращает ноль для дочернего идентификатора.

pid=fork()
if pid==0
//this is the child process
else if pid!=0
//this is the parent process

благодаря этому вы можете предоставить различные действия для родительского и дочернего элементов и использовать функцию многопоточности.

6
ответ дан 24 November 2019 в 09:54
поделиться

fork () используется для создания дочернего процесса. Когда вызывается функция fork (), будет порожден новый процесс, и вызов функции fork () вернет другое значение для дочернего и родительского.

Если возвращаемое значение - 0, вы знаете, что вы дочерний процесс, а если возвращаемое значение - число (которое оказывается идентификатором дочернего процесса), вы знаете, что вы родитель. (и если это отрицательное число, форк не удалось создать дочерний процесс)

http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

9
ответ дан 24 November 2019 в 09:54
поделиться

fork () - это то, как Unix создает новые процессы. В момент, когда вы вызвали fork (), ваш процесс клонируется, и два разных процесса продолжают выполнение оттуда. Один из них, дочерний, будет иметь fork () return 0. Другой, родительский, будет иметь fork (), возвращающий PID (идентификатор процесса) дочернего процесса.

Например, если вы введете следующее в shell программа оболочки вызовет fork (), а затем выполнит переданную команду (в данном случае telnetd) в дочернем элементе, в то время как родительский элемент снова отобразит приглашение, а также сообщение, указывающее PID фонового процесса .

$ telnetd &

Что касается причины, по которой вы создаете новые процессы, это то, как ваша операционная система может делать много вещей одновременно. Вот почему вы можете запустить программу, а пока она работает, переключиться в другое окно и заняться чем-нибудь еще.

13
ответ дан 24 November 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: