Параллельно запускайте сокет и другие вычисления в C ++ - PullRequest
0 голосов
/ 08 февраля 2019

Извините, если этот вопрос слишком легко решить.Я хотел бы реализовать следующие сценарии в C ++.Существует набор функций для оценки, таких как f_1, f_2 и т. Д. При оценке f_i программа отправляет и получает что-то на или с другого хоста.Когда f_i заканчивается, появляется некоторое возвращаемое значение.Таким образом, программа должна немедленно перейти к части сокета, чтобы отправить значение или получить что-то от другого компьютера.Но в то же время должно начаться вычисление f_j, которое сейчас не оценивается.

Я знаю, что многопоточность может решить эту проблему.Но как один поток узнает, завершается ли вычисление в каком-то конкретном потоке?

Если сокет заменить на File I / O, я думаю, что мы можем сделать то же самое.

Это было быочень признателен, если вы предложите мне способ решить эту или какую-то ссылку для этого.

1 Ответ

0 голосов
/ 08 февраля 2019

Вероятно, у вас должен быть хотя бы один поток ввода-вывода с циклом событий для обработки ваших сокетов.

Этот поток ввода-вывода может отправлять вычисления в пул потоков.Как только вычисления завершатся, вы должны сообщить потоку ввода / вывода, что он должен отправить результат вычисления.Есть несколько способов сделать это, один простой метод для вычислительного потока, чтобы выделить результат вычисления в куче и записать указатель на него в канал.Цикл событий потока ввода-вывода замечает, что в конце канала доступны данные для чтения, читает указатель на результат и начинает отправлять его неблокирующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...