Article View: pl.comp.programming
Article #217054Re: Integracja bibliotek event-based
From: heby
Date: Mon, 08 Jun 2020 22:32
Date: Mon, 08 Jun 2020 22:32
31 lines
2861 bytes
2861 bytes
On 08/06/2020 23:58, Maciej Sobczak wrote: > Jakie jest poprawne rozwiązanie dla integracji tych 3 bibliotek? To zależy co robią. Jeśli ich zadaniem jest coś policzyć i zniknąć to masz dobrze. Jesli ich zadaniem jest coś policzyć tylko jak będzie potrzeba to od tego masz wsparcie OSa i jego pętlę komunikatów. Być może też jakieś wątki pod spodem, ale klient o nich nie wie, bibliteka często też nie wie. Ogólnie cooperative multitasking bazuje na tym że robisz jak przychodzi jakiś event. Systemowy zazwyczaj. Można poprosić aby przychodził non-stop jeden za drugim. Każdemu w/g potrzeb. Oba podejścia są od dziesiątek lat katowane choćby w Qt i masz tam jakiś obraz tego jak zrobić 1) (onIdle()) i jak zrobić 2) (push event). Mogą z sobą działać bardzo gładko i elegancko. Mam duże (w sensie wielopoziomoe) algorytmy rozbite na pojednycze kroki i popychane z onIdle z głownej pętli. Spadek wydajności jest, ale pomijalny, choć oczywiscie wszystko zależy od tego jak realizowany jest yeld(). To podejście jest nie dla sztuki, tylko warunki brzegowe utrudniają użycie watków. Na szczęscie nie ma najmniejszego problemu, w dodatku mogę takie coroutines wrzucić *dynamicznie* do wątku i z niego wyjąć kiedy tylko chcę, na przykład w połowie pracy. Teoretycznie każdy algorytm można przerobić na coroutine za pomocą boost::context ale koszt może być wysoki, to wszak przełącza kontekst, prawie jak wątek. W przypadku ręcznym najczęściej pasuje jakiś wzorzec typu maszyn stanów. Do ogarnięcia w typowych przypadkach, rekurencja jest bardziej bolesna, ale niewiele.
Technical Details
Message-ID:
<rbmea1$76l$1@dont-email.me>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!news.uzoreto.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mailReferences:
<5d642286-413d-47db-91b0-c689bbe167f4o@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!news.uzoreto.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: heby <heby@poczta.onet.pl> Newsgroups: pl.comp.programming Subject: Re: Integracja bibliotek event-based Date: Tue, 9 Jun 2020 00:32:25 +0200 Organization: A noiseless patient Spider Lines: 31 Message-ID: <rbmea1$76l$1@dont-email.me> References: <5d642286-413d-47db-91b0-c689bbe167f4o@googlegroups.com> Mime-Version: 1.0 Injection-Date: Mon, 8 Jun 2020 22:32:34 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="4c153b40bcfdd4da9ebc0d5378bd9412"; logging-data="7381"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18Mgq4M8QCf80rysPQZ8tgS" User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1 Cancel-Lock: sha1:xsLiIRycG1LqVDBn1THb8gB0WCs= In-Reply-To: <5d642286-413d-47db-91b0-c689bbe167f4o@googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit