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

enter image description here это изображение взято из Практическое использование 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 Ответ

0 голосов
/ 23 мая 2018

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

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

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

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

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

...