C/C++ - нативный подход, используются механизмы многопоточности предоставляемые ядром.
JDK - по-умолчанию потоки виртуальной машины мапятся на нативные потоки ОС 1:1, но можно переключить JVM на зеленые потоки - реализацию JDK, которая работатет по факту только в одном системном потоке по-очередно переключаясь между потоками виртуальной машины, симулируя многопоточность, иногда за счет економии на переключениях на уровне ядра, это может быть оправдано.
Python - (CPython) хоть и используется манипулирование нативными потоками, но в этот момент происходит GIL(Global Interpreter Lock), что означает, что в одно и тоже время, только один поток может использовать интерпретатор питона для выполнения его команд, при истечении лимита команд на один поток, происходит переключение на другой. Поэтому паралельной работы в одно и тоже время не происходит. В питон подключаются библиотеки Си, они чаще всего потоконебезопасны, поэтому подход с GIL пытается это обезопасить. В рамках проекта PyPy (в котором компилятор питона пишется на самом питоне) пытаются реализовать модель "Транзакционной памяти"(Software Transactional Memory, SТМ). На данный момент даже в многопоточных вычислениях интерпретатор с STM работает в разы медленней, чем с GIL. Но за счёт JIT PyPy-STM всё равно быстрее, чем CPython.
Erlang - реализут в многопоточности модель "ничего общего"(shared nothing), используются микропроцессы(юзерспес виртуальной памяти), а не потоки, что очень быстро.
JDK - по-умолчанию потоки виртуальной машины мапятся на нативные потоки ОС 1:1, но можно переключить JVM на зеленые потоки - реализацию JDK, которая работатет по факту только в одном системном потоке по-очередно переключаясь между потоками виртуальной машины, симулируя многопоточность, иногда за счет економии на переключениях на уровне ядра, это может быть оправдано.
Python - (CPython) хоть и используется манипулирование нативными потоками, но в этот момент происходит GIL(Global Interpreter Lock), что означает, что в одно и тоже время, только один поток может использовать интерпретатор питона для выполнения его команд, при истечении лимита команд на один поток, происходит переключение на другой. Поэтому паралельной работы в одно и тоже время не происходит. В питон подключаются библиотеки Си, они чаще всего потоконебезопасны, поэтому подход с GIL пытается это обезопасить. В рамках проекта PyPy (в котором компилятор питона пишется на самом питоне) пытаются реализовать модель "Транзакционной памяти"(Software Transactional Memory, SТМ). На данный момент даже в многопоточных вычислениях интерпретатор с STM работает в разы медленней, чем с GIL. Но за счёт JIT PyPy-STM всё равно быстрее, чем CPython.
Erlang - реализут в многопоточности модель "ничего общего"(shared nothing), используются микропроцессы(юзерспес виртуальной памяти), а не потоки, что очень быстро.
Комментариев нет:
Отправить комментарий