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