Re: Počet vláken

Martin Záruba swz na volny.cz
Čtvrtek Prosinec 10 11:25:25 CET 2020


No já to vlastně takto předělal z verze, kdy bylo jedno vlákno. Ono to v 
podstatě funguje tak, že se připojí klient (PLC). Server vyhodnotí, že 
je to oprávněné připojení a pak se již stará o komunikaci. Tím pádem PLC 
může být za firewallem a nemusí mít veřejnou IP. Problém je v tom, že 
komunikace běží na pomalém modbusu, takže naprostá většina doby je 
čekání na data. Pokud to jsou vlákna, tak to není problém, protože se o 
to stará systém a i na prastarém procesoru je vytížení zanedbatelné. 
Jenže nedovedu si představit, jak se jedno vlákno bude starat o 
komunikaci s několika zcela asynchronně běžícími procesy.

Jinak tak, jak jste to popsal to funguje, jenže jekmile naslouchací 
vlákno identifikuje požadavek a spustí to komunikační, dál se o to 
nestará. To je mi jasné, jenže to komunikační vlákno vlastně nikdy 
nekončí, protože je to smyčka, která čte data (nebo i zapisuje) z PLC 
tak rychle, jak to modbus zvládne. Pokud spojení spadne, vlákno se 
ukončí a PLC se pokusí přihlásit znovu a zase dostane vlákno. Tak mě 
nenapadá, jak to udělat jinak.

Martin Záruba

Dne 10.12.2020 v 7:33 Marek Sembol napsal(a):
> Zdravim,
> Lazara neznam ani omylem, ale: Ono chyba 'out of memory' nemusi nutne 
> znamenat, ze dosla pamet obecne. Mnohdy ma program/system vyhrazenou 
> statickou (pevne delky) tabulku na nejake prostredky pokud nema volny 
> slot - vyhodi out-of-memory (a ma pravdu-dosla mu vyhrazena pamet) Na 
> podobny problem jsem narazil jednou s .NET (tehdy jeste 3.5) Program 
> pomerne intenzivne (az agresivne) vyuzival thready z ThreadPool. 
> Problem byl, ze tam byl taky pevny strop - a jeste zavisly na poctu 
> jader. Tusim 256/jadro.
> Obecna rada - ono stejne neni pro system moc zdrave drzet si stabilne 
> tolik thready. Kazda sranda (thread) neco stoji. Ten thread dokonce 
> relativne dost.
> Takze moje rada vas nepotesi - predelat strukturu programu, aby 
> nepotreboval tolik threadu. Neco jako jeden thread na naslouchani a v 
> pripade prichoziho pozadavku, si docasne vytvorit (nejlepe pouzit z 
> thread pool, pokud lazarus ma, jinak si napsat svuj. Tvoreni thredu je 
> hodne drahe) threadik na zpracovani pozadavku a pak ho zas hezky 
> vratit/uklidit.
> BR,
> Marek
>
> On Thu, Dec 10, 2020 at 6:51 AM Martin Záruba <swz na volny.cz 
> <mailto:swz na volny.cz>> wrote:
>
>     Mám v prostředí Lazarus program, který po připojení přes TCP/IP
>     založí
>     vlákno a provede příslušnou akci. Pokud ale počet vláken dosáhne
>     hodnoty
>     115 dostanu zprávu
>
>     Project xxx vyvolal výjímku třídy ´EThread´ se zprávou:
>
>     Thread creation error: K provedení tohoto příkazu není dost
>     paměťových
>     prostředků
>
>
>     Jenže ono to nezáleží na paměti. Na různých PC se to chová stejně.
>     Zjevně někde přetečou nějaké tabulky. Ale kde?
>
>     -- 
>
>     Martin Záruba
>
>     _______________________________________________
>     HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>     http://list.hw.cz/mailman/listinfo/hw-list
>     <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list