libuv — цикл событий и потоки

Я понимаю, что цикл событий работает на одном процессе (таким образом, на одном ядре), но я хотел бы знать, что происходит, когда я запускаю оттуда потоки.

Если я запущу несколько потоков с помощью uv_thread_create или uv_queue_work, будут ли они работать на нескольких ядрах (если они доступны)?

Я надеюсь, что они это сделают, потому что (по крайней мере, в Unix) все основано на pthreads, которые могут масштабироваться до нескольких ядер, но я не знаю.

Кроме того, я не могу написать код для проверки этого прямо сейчас, потому что я на мобильном телефоне. Я просто написал, чтобы узнать, знает ли кто-нибудь из вас, ребята, ответ.

Счастливых праздников.

Изменить: я сделал тестовый код, и все работает на одном ядре.


person almosnow    schedule 23.12.2014    source источник


Ответы (1)


Это действительно зависит от ядра, но в целом оно будет планировать каждый поток для другого ядра (если у вас их несколько), чтобы вы могли запускать свой код параллельно. Однако обратите внимание, что libuv не является потокобезопасным (за исключением uv_async_send), поэтому, если у вас одновременно выполняется несколько потоков, когда-то являющихся циклом событий, небезопасно вызывать функции libuv вне потока цикла.

person saghul    schedule 09.01.2015