crypt of decay - c coroutine library [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

c coroutine library [Aug. 4th, 2013|05:16 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
захотелось написать мелкопроксик для http. ну, вот захотелось. варианты с «на каждое соединение по потоку» и «толстый шедулер, разбитие руками на машины состояний» я уже делал. решил в этот раз попробовать решение на сопрограммах: это удобней, чем машины состояний руками пидорасить. и даже не очень руками. писать пока не начал, само собой, потому что сижу и выбираю библиотеку сопрограмм.

отлично выглядит libtask от Russ Cox. там куча вкусного, не очень много лишнего и вообще очень приятно всё. первый вариант.

также интересно выглядят lthread'ы: киллер-фича в том, что можно автоматически сдвинуть «зелёный» поток в «настоящий» вызовом lthread_compute_begin() и потом вернуть назад, позвав lthread_compute_end(). то есть, на время долгих считалочек превратить в настоящий системный поток, не заставляя делать это руками и не тормозя остальных в кооперативе. ня!

также смотрел на ribs (монстр), GNU pth (монстр), libconcurrency (не сработала, а жаль: у неё заявлена фича multiple continuations), libcoro от M.A.Lehmann (красиво, но очень уж минималистично), pcl (особых преимуществ перед другими не увидел, зато увидел автокрап и убежал), State Threads Library (всё ещё рассматриваю; оно таки неплохо заточено под сетку, но немного пугает обилием апей).
Linkmeow!