Почему я должен использовать сопрограмму в C/C++

это изображение происходит из практического использования setjmp и longjmp в C.

Насколько я понимаю, coroutine Этот процесс выглядит как параллельный процесс для человека, но фактически выполняет один процесс для компьютера.

Но используя setjmp & longjmp Мне очень трудно читать код. Если нужно написать тот же. Например процесс A & B, я дам сервал States чтобы процессы разделяли их на разные части (состояния), последовательно делайте так:

Process A

switch (state)
    case A1:
        if (A1 is done)
           do B1
        break;
    ...

Process B

switch (state)
    case B1:
        if (B1 is done)
           do A2
        break;
    ...

Мне нужна причина, чтобы поддержать меня использовать setjmp & longjmp & coroutine в C/C++. В чем преимущество?

1 ответ

setjmp/longjmp() редко используется в настоящее время программистом. Вместо этого вы должны использовать более мощный boost::coroutine или мой QtNetworkNg. Coroutine широко используется и в основном в сетевом программировании.

Я являюсь автором QtNetworkNg, который обеспечивает реализацию сопрограммы. В документе QtNetworkNg я написал:

Традиционное сетевое программирование использует потоки. send()/recv() блокируется, и затем операционная система переключает текущий поток на другой готовый поток, пока не поступят данные. Это очень просто и легко для сетевого программирования. Но потоки используют большие ресурсы, тысячи соединений могут занимать много памяти. Хуже того, потоки вызывают скачки данных, прерывание данных, даже сбои.

Парадигма на основе сопрограмм - теперь и особенность сетевого программирования. Coroutine - это легковесный поток, имеющий собственный стек, не управляемый операционной системой, а QtNetworkNg. Как и основанная на потоках парадигма, send()/recv() блокируется, но переключается на другую сопрограмму в том же потоке, куда поступили данные. Многие сопрограммы могут быть созданы по низкой цене. Поскольку существует только один поток, не требуется никаких блокировок или другой синхронизации. API прост как парадигма на основе потоков, но избегает сложностей использования потоков.

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

Другие вопросы по тегам