2014-12-23 4 views
2

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

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

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

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

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

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

ответ

3

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

Смежные вопросы