|
|
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
Есть многопоточное приложение, которое принимает запросы по сети, обрабатывает, при некоторых условиях формирует пакеты запросов к другим системам получает ответы, формирует ответы. Некий такой прокси с промежуточной обработкой и хитрой маршрутизацией . Нити между собой спят на мутексах либо на ожидании из сокетов ( epoll), иногда налетают на дедлоки или продолжают спать когда нужно работать. Какие есть варианты алгоритмов реализации сна нитей при бездействии, без использования явного sleep и пустых перепрыгиваний с мутекса в epoll и обратно для проверки информации в сокетах? Ссылки приветсвуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 15:38 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
Исходники ZeroMQ полистай, может найдешь чего-нибудь интересное. Там по сути тоже самое реализовано: есть соединения tcp и inproc . Первые по сети (на сокетах), вторые между тредами (вроде на мутексах). И есть zmq_poll() для ожидания в т.ч. с разных типов соединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 15:55 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
д0k, точно нити имеешь ввиду, а не потоки? физически нити вообще не должны ждать чего бы то ни было, только на уровне абстракции, иначе не останется времени для других нитей в потоке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 11:04 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)д0k, точно нити имеешь ввиду, а не потоки? физически нити вообще не должны ждать чего бы то ни было, только на уровне абстракции, иначе не останется времени для других нитей в потоке Для меня нити и потоки синонимы. Приложение использует вытесняющую многозадачность ОС и POSIX Threads. Меня в принципе инетересует абстрактный алгоритм, как одним примитивом ожидания разрулить евенты на сокетах от ос и взаимодействие нитей между собой. Едиственный вариант, который пока я вижу, выбросить epoll и написать велосипед , который по sigio будет сбивать потоки( нити ) с мутексов( семафоров). То есть потоки должны спать только на мутексах(семафорах) и никогда на сокетах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 14:04 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
д0k, значит всё же потоки, а не нити - у нити нет своего выделённого времени выполнения по вопросу: как вариант можно свести всё к сокетам - т.е. создать управляющее соединение к самому себе вместо семафора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 17:39 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
д0kkealon(Ruslan)д0k, точно нити имеешь ввиду, а не потоки? физически нити вообще не должны ждать чего бы то ни было, только на уровне абстракции, иначе не останется времени для других нитей в потоке Для меня нити и потоки синонимы. Приложение использует вытесняющую многозадачность ОС и POSIX Threads. Меня в принципе инетересует абстрактный алгоритм, как одним примитивом ожидания разрулить евенты на сокетах от ос и взаимодействие нитей между собой. Едиственный вариант, который пока я вижу, выбросить epoll и написать велосипед , который по sigio будет сбивать потоки( нити ) с мутексов( семафоров). То есть потоки должны спать только на мутексах(семафорах) и никогда на сокетах. сажаешь один поток на epoll а остальные на condition_variable в качестве рабочих потоков. И нет никаких дэдлоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 18:05 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
lockedд0kпропущено... Для меня нити и потоки синонимы. Приложение использует вытесняющую многозадачность ОС и POSIX Threads. Меня в принципе инетересует абстрактный алгоритм, как одним примитивом ожидания разрулить евенты на сокетах от ос и взаимодействие нитей между собой. Едиственный вариант, который пока я вижу, выбросить epoll и написать велосипед , который по sigio будет сбивать потоки( нити ) с мутексов( семафоров). То есть потоки должны спать только на мутексах(семафорах) и никогда на сокетах. сажаешь один поток на epoll а остальные на condition_variable в качестве рабочих потоков. И нет никаких дэдлоков. С этим как раз все проблемы , так как сетевой поток во время ожидания на сокете может проспать отправку сообщения в сеть, созданного в соседнем потоке. Это явилось причиной доработок , которые налетают на дедлоки и прочие несогласованности, вобщем просыпать прием и отправку сообщение по сети приложение стало не меньше при усложнении кода. Рассматириваем тему рефаторинга и собираем материалы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 19:00 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)д0k, значит всё же потоки, а не нити - у нити нет своего выделённого времени выполнения по вопросу: как вариант можно свести всё к сокетам - т.е. создать управляющее соединение к самому себе вместо семафора Управляющее соединение рассматриваем. http://man7.org/linux/man-pages/man7/mq_overview.7.htmlно не через сетевые сокеты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 19:18 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
д0klockedпропущено... сажаешь один поток на epoll а остальные на condition_variable в качестве рабочих потоков. И нет никаких дэдлоков. С этим как раз все проблемы , так как сетевой поток во время ожидания на сокете может проспать отправку сообщения в сеть, созданного в соседнем потоке. Как это просыпает отправку? Из потока который создал сообшение оно сразу пишется в сокет. При получении EWOULDBLOCK остаток ставится в выходную очередь и активируется EPOLLOUT на этом сокете. Или если хочешь отсылать все из epoll потока то добавляешь к epoll хандлер из eventfd и управляешь им для вывода epoll потока из ожидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 20:39 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
lockedд0kпропущено... С этим как раз все проблемы , так как сетевой поток во время ожидания на сокете может проспать отправку сообщения в сеть, созданного в соседнем потоке. Как это просыпает отправку? Из потока который создал сообшение оно сразу пишется в сокет. При получении EWOULDBLOCK остаток ставится в выходную очередь и активируется EPOLLOUT на этом сокете. Или если хочешь отсылать все из epoll потока то добавляешь к epoll хандлер из eventfd и управляешь им для вывода epoll потока из ожидания. Тред который занимается бизнес логикой не лезет в ввод вывод, по куче всяких причин. а сетевой тред обслуживает ввод вывод и не лезет в бизнес логику. Такова архитетктура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2016, 23:35 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
д0кlockedпропущено... Как это просыпает отправку? Из потока который создал сообшение оно сразу пишется в сокет. При получении EWOULDBLOCK остаток ставится в выходную очередь и активируется EPOLLOUT на этом сокете. Или если хочешь отсылать все из epoll потока то добавляешь к epoll хандлер из eventfd и управляешь им для вывода epoll потока из ожидания. Тред который занимается бизнес логикой не лезет в ввод вывод, по куче всяких причин. а сетевой тред обслуживает ввод вывод и не лезет в бизнес логику. Такова архитетктура. В таком случае расскажи нам поподробнее о таковой архитектуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 01:39 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
lockedд0кпропущено... Тред который занимается бизнес логикой не лезет в ввод вывод, по куче всяких причин. а сетевой тред обслуживает ввод вывод и не лезет в бизнес логику. Такова архитетктура. В таком случае расскажи нам поподробнее о таковой архитектуре. На уровне управления проектом распределено. Что отраpазилось на API. Люди , которые занимаются системными вопросами не лезут в исходники где реализована бизнеслогика, а те кто сконцентрирован на бизнеслогике не лезет в системщину. Фронтэнд сконцентрирован только на эргономике и удобстве интерфейса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 11:08 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
Рамках пока свободного квеста смотрим на слабые места системы. Планируем заглянуть в нишу жеского хайлоад. Завтра распродажи на алиэкспересе покажут новые места для на которые нужно будет обращать внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 11:25 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
д0k, если речь зашла об архитектуре ссылочку повторю, мне нравится как здесь синхронная логика преобразуется в асинхронные вызовы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:40 |
|
||
|
Синхронизация нитей
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)д0k, если речь зашла об архитектуре ссылочку повторю, мне нравится как здесь синхронная логика преобразуется в асинхронные вызовы Огромное Спасибо!!! Это приблизительно то, что нам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 17:37 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=25&tid=1340569]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 319ms |

| 0 / 0 |
