LINUX.ORG.RU

thread::shared сложных структур. Как?

 ,


0

2

Как расшаривать простые структуры между тредами - понятно:

use threads::shared;
our %data : shared;


Но таким образом нельзя шарить вложенные структуры. Кто как решил эту проблему?

★★★★★

Последнее исправление: helios (всего исправлений: 3)
Ответ на: комментарий от helios

Не обращайте внимания. Работают исправно. Вот шарить данные действительно неудобно - не нашел решения. Был проект в котором гоняли строки с JSONом между двумя тредами, и это решение отлично работало.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

Вот шарить данные действительно неудобно - не нашел решения. Был проект в котором гоняли строки с JSONом между двумя тредами, и это решение отлично работало.

а на кой тогда потоки?

Reset ★★★★★
()
Ответ на: комментарий от Reset

У нас, грязных орков, бывают архитектурные проблемы. Это когда в исправно работающую систему, приходится добавлять костыль в виде треда со сложным протоколом обмена данными.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

В таком виде (гонять json) лучше всё почесноку гонять через сокет.
В своё время с перловыми средами так же намучался, так что тоже не советую их использование.

vtVitus ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо, анон! our $var = &share({}); - то, что было нужно!

helios ★★★★★
() автор топика
Ответ на: комментарий от soomrack

В perl 5 потоки не просто текут, а прямо-таки хлещут. Поэтому только fork.

Такого не заметил. Хотя, у меня потоки быстро мрут - может не успевают разъесться.

helios ★★★★★
() автор топика
Ответ на: комментарий от helios

Я нашел если не кривость то серьезный недостаток. Несмотря на то что в перле есть модули для реализации семафоров (Thread::Semaphore), любая шаренная структура данных лочится интерпретатором независимо от того - хочешь ты этого или нет.

В результате я написал модуль для Read-Write блокировок, который должен был ускорить обрабаотку в несколько раз. Вместо этого многопоточная версия работала в несколько раз медленне однопоточной и я обнаружил что 99% времени процесс проводит внутри ядра дергая futex.

OxiD ★★★★
()
Ответ на: комментарий от Chaser_Andrey

Кажется не существует задач (кроме может быть ГУЯ - и то глядя на хромиум меня терзают соменения) в которых нельзя потоки заменить на процессы. И кажется мне что программировать процессы проще чем потоки.

OxiD ★★★★
()
Ответ на: комментарий от OxiD

Я придерживаюсь противоположенной точки зрения - с потоками проще работать и процессы чаще всего можно заменить потоками.

Но потоки в перле - ещё та задница. И всё же, свои задачи они исполняли на ура.

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

Возможно что в перле потоки действительно имею ссове преимущество. Едимнственное которое я вижу - не надо сериализовывать данные перед IPC.

OxiD ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.