Vladimir
птреад это либа сисколов
Vladimir
pthread_condvar - через мьютексы вроде синхронизирует, не?
Alexander
ну на птредах тоже можно сделать дешевое общение без сисколов
Маjко
http://www.codingtree.com/c/c-pthreads-condvars.html
Маjко
Нет, не сисколлы
Alexander
если человеку хочется делать разные процессы это должно быть по своим причинам
Маjко
Я правил код кондваров и мьютексов
Alexander
например не хочется чтобы они шарили память, или хочется чтобы они были от разных пользователей/в разных неймспейсах
Маjко
Там сисколлов вообще нет)
Alexander
или ограничивать ресурсы процессов
Маjко
Vladimir
так это futex
Маjко
Я хз что там futex
Маjко
Что mutex
Маjко
Но я писал реализацию мьютекса по аналогии с x86_64
Vladimir
и то, там потом в системный шедулинг уходит если долго спинлок не срабатывает
Евгений
Ты mutex и futex не путаешь часом?
Маjко
Там атомики
Alexander
как атомики помогут ожиданию на mutex?
Alexander
там наверняка есть fast-path
Alexander
но если ты в slow-path, то придётся просить тебя разбудить
Маjко
Ок, я дурак, я ж как раз busy waiting часть и реализовывал
Alexander
и делать это будет или ведро или рантайм система
Евгений
https://ds9a.nl/futex-manpages/futex2.html
Alexander
> The futex() system call provides a method for a program to wait for a value at a given address to change
Alexander
из man page 1 предложение
Маjко
Был не прав, там сисколлы, если надо ждать дольше, чем busy waiting
Alexander
если не свой рантайм, то ожидание == сискол, и я бы не сказал, что это плохо
Alexander
ну да, не busy ожидание, с ним норм
Маjко
Сисколлы так то быстрые, вообще
Vladimir
Alexander
но в целом идея иметь pthreads, а не процессы, разумная
Маjко
pthreads можно юзать и в IPC
Alexander
т.к. переключение между ними быстрее и возможностей общаться больше
Маjко
Всмысле их примитивы синхронизации
Alexander
угу
Vladimir
Alexander
я то думал что разговор про треды, т.к. есть требования, которые не покрыть pthreads
Alexander
@c_vld каждый из участников общения это тред в одном процессе
Евгений
Потому что процессы и потоки это одно и то же самое
Alexander
нет
Евгений
Типа вопрос разделять память или нет?
Alexander
@elemir90 сделай мне два треда так, чтобы они от разных пользователей работали
Alexander
или в разных неймспейсах
Vladimir
Vladimir
I - inter
Alexander
write()/read()
Alexander
без флага NO_BLOCK?
Vladimir
пойдет
Alexander
write_all() в терминах rust
Vladimir
и сокеты. send() recv() как частный случай
Евгений
Vladimir
Евгений
Берёшь и одного меняешь user id, счастье
Маjко
Я делал через shm и кондвары
Маjко
То что ты и описываешь, примерно
Маjко
ТОлько без красивых API
Маjко
mmap в начале
Евгений
Чтобы разные неймспейсы -- выставляешь в клоне CLONE_NEWNS
Маjко
И потом только синхронизация кондварами
Vladimir
Vladimir
Евгений
В 2k17 не знать что процессы и треды это одно и то же самое
Vladimir
Евгений
Vladimir
хех
Alexander
BUGS
In the obsolete LinuxThreads implementation, each of the threads in a process has a different process ID.
This is in violation of the POSIX threads specification, and is the source of many other nonconformances to
the standard; see pthreads(7).
Vladimir
+
Евгений
Alexander
но вообще да в linux с учетом clone и точной настройкой того, что шарить, а что нет - разница не велика
Alexander
угу
Alexander
pthreads_create
Евгений
Ну pthreads это же юзерспейсная надстройка над clone