> vytvořil sem program který posílá data mezi programi po lokální síťi a potřebuji ho zrychlit?
Nevím
> Moje otázka zní jestli bude rychlejší, když soket vytvořím jenom jednou za celý běh programu
Jestli vytváříš socket pokaždé (40x za sekundu) pro ten samý cíl, tak to asi není dobré řešení. Vytvoření a pak uzavření socketu samozřejmě něco stojí, 40x za sekundu není málo. Určitě si polepšíš, pokud se k serveru připojíš a zůstaneš připojen, dokud tě server neodpojí. Po odpojení (např. kvůli nějakému timeoutu) prostě socket zavřeš a připojíš se znovu, až budeš potřebovat další data. Stačí ti jen kontrolovat návratové hodnoty / chybové kódy fcí jako epoll_wait, poll, select, read, write, ... nebo co používáš.
> popřípadě jestli se dají přenosy zrychlit pokud budu posílat data ve vláknech
Hlavně nevytvářej X vláken, ve kterých zapisuješ do jednoho socketu. Výsledkem by mohl být pěkný bordel, co přijde na server.
Pokud potřebuješ posílat data do X serverů současně, tak možná, ale možná by stačil i obyčejný epoll_wait, poll, nebo select, nebo i neblokovací read/write. Někdy může být řešení s vlákny pomalejší kvůli přepínání kontextu a akorát si přiděláš práci se synchronizací. Nejlepší bude, když to vyzkoušíš a použiješ to, co je pro daný případ "to správné".
> vytvořil sem program který posílá data mezi programi po lokální síťi a potřebuji ho zrychlit?
Nevím
> Moje otázka zní jestli bude rychlejší, když soket vytvořím jenom jednou za celý běh programu
Jestli vytváříš socket pokaždé (40x za sekundu) pro ten samý cíl, tak to asi není dobré řešení. Vytvoření a pak uzavření socketu samozřejmě něco stojí, 40x za sekundu není málo. Určitě si polepšíš, pokud se k serveru připojíš a zůstaneš připojen, dokud tě server neodpojí. Po odpojení (např. kvůli nějakému timeoutu) prostě socket zavřeš a připojíš se znovu, až budeš potřebovat další data. Stačí ti jen kontrolovat návratové hodnoty / chybové kódy fcí jako epoll_wait, poll, select, read, write, ... nebo co používáš.
> popřípadě jestli se dají přenosy zrychlit pokud budu posílat data ve vláknech
Hlavně nevytvářej X vláken, ve kterých zapisuješ do jednoho socketu. Výsledkem by mohl být pěkný bordel, co přijde na server.
Pokud potřebuješ posílat data do X serverů současně, tak možná, ale možná by stačil i obyčejný epoll_wait, poll, nebo select, nebo i neblokovací read/write. Někdy může být řešení s vlákny pomalejší kvůli přepínání kontextu a akorát si přiděláš práci se synchronizací. Nejlepší bude, když to vyzkoušíš a použiješ to, co je pro daný případ "to správné".
Citovat příspěvek