История изменений
Исправление quasimoto, (текущая версия) :
А с таким определением «конкурентности», вообще существуют «параллельные» языки?
Разница между http://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_lang... и https://en.wikipedia.org/wiki/Category:Concurrent_programming_languages ?)
Немного мыслью по древу:
http://en.wikipedia.org/wiki/Concurrent_computing
Concurrent computing is a form of computing in which programs are designed as collections of interacting computational processes that may be executed in parallel.
may выделено курсивом.
http://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_lang...
A concurrent language is defined as one which uses the concept of simultaneously executing processes or threads of execution as a means of structuring a program.
Откуда полагаем, что тут «simultaneously» может быть «не настоящая».
То есть если не may, то point не теряется, так как суть в структуре программ.
A parallel language is able to express programs that are executable on more than one processor.
А параллелизм должен быть настоящим, то есть должно быть задействовано более одного физического вычислителя и должен быть контроль за тем кто где выполняется.
Тут можно взять can, и если не can, то весь point теряется (кто будет использовать OpenMP на одном ядре?), только в качестве незапланированного поведения (выявляемого профилированием), так что не should/shall.
Both types are listed as concurrency is a useful tool in expressing parallelism, but it is not necessary.
anonymous говорил про семантику — как минимум семантически в «конкурентном» языке должна быть нотация для (денотации) p | q (и !p), сообщения или общие ресурсы уже опциональны. Что будет делать планировщик уже не важно — регистрировать процессы по ядрам/нодам и на каждом переключать их или переключать задачи в последовательном режиме на одном вычислителе.
Для «параллельности» аналогичная денотация f on A | g on B должна предполагать именно железно параллельное выполнение f и g на A и B. Повыше уровнем могут быть менее строгие (но с синхронизацией по времени) !f и f | g, а f[g] может неявно компилироваться в f | g.
Ещё говорят, что «конкурентность» индетерминированна, а «параллельность» — детерминированна.
Для примера — в Haskell есть p >> forkIO q для p | q (forkIO p для !p) и f `par` g для f | g. Там это совсем разные вещи. Конечно, f `par` g не даёт точных гарантий, да и ядро может быть одно, но в целом оно «работает».
В C++ есть std::thread и OpenMP, TBB (parallel_ и concurrent_).
Ещё говорят про coarse-grained concurrency и fine-grained parallelism.
Последнее (http://en.wikipedia.org/wiki/Cilk — Paradigm(s): parallel, Categories: Concurrent programming languages o_0) — с одной стороны spawn, с другой — determinism и sync, то есть параллелизм в овечьей шкуре :)
Исправление quasimoto, :
А с таким определением «конкурентности», вообще существуют «параллельные» языки?
Разница между http://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_lang... и https://en.wikipedia.org/wiki/Category:Concurrent_programming_languages ?)
Немного мыслью по древу:
http://en.wikipedia.org/wiki/Concurrent_computing
Concurrent computing is a form of computing in which programs are designed as collections of interacting computational processes that may be executed in parallel.
may выделено курсивом.
http://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_lang...
A concurrent language is defined as one which uses the concept of simultaneously executing processes or threads of execution as a means of structuring a program.
Откуда полагаем, что тут «simultaneously» может быть «не настоящая».
То есть если не may, то point не теряется, так как суть в структуре программ.
A parallel language is able to express programs that are executable on more than one processor.
А параллелизм должен быть настоящим, то есть должно быть задействовано более одного физического вычислителя и должен быть контроль за тем кто где выполняется.
Тут можно взять can, и если не can, то весь point теряется (кто будет использовать OpenMP на одном ядре?), только в качестве незапланированного поведения (выявляемого профилированием), так что не should/shall.
Both types are listed as concurrency is a useful tool in expressing parallelism, but it is not necessary.
anonymous говорил про семантику — как минимум семантически в «конкурентном» языке должна быть нотация для (денотации) p | q (и !p), сообщения или общие ресурсы уже опциональны. Что будет делать планировщик уже не важно — регистрировать процессы по ядрам/нодам и на каждом переключать их или переключать задачи в последовательном режиме на одном вычислителе.
Для «параллельности» аналогичная денотация f on A | g on B должна предполагать именно железно параллельное выполнение f и g на A и B. Повыше уровнем могут быть менее строгие (но с синхронизацией по времени) !f и f | g, а f[g] может неявно компилироваться в f | g.
Ещё говорят, что «конкурентность» индетерминированна, а «параллельность» — детерминированна.
Для примера — в Haskell есть p >> forkIO q для p | q (forkIO p для !p) и f `seq` g для f | g. Там это совсем разные вещи. Конечно, f `seq` g не даёт точных гарантий, да и ядро может быть одно, но в целом оно «работает».
В C++ есть std::thread и OpenMP, TBB (parallel_ и concurrent_).
Ещё говорят про coarse-grained concurrency и fine-grained parallelism.
Последнее (http://en.wikipedia.org/wiki/Cilk — Paradigm(s): parallel, Categories: Concurrent programming languages o_0) — с одной стороны spawn, с другой — determinism и sync, то есть параллелизм в овечьей шкуре :)
Исходная версия quasimoto, :
А с таким определением «конкурентности», вообще существуют «параллельные» языки?
Разница между http://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_lang... и https://en.wikipedia.org/wiki/Category:Concurrent_programming_languages ?)
Немного мыслью по древу:
http://en.wikipedia.org/wiki/Concurrent_computing
Concurrent computing is a form of computing in which programs are designed as collections of interacting computational processes that may be executed in parallel.
may выделено курсивом.
http://en.wikipedia.org/wiki/List_of_concurrent_and_parallel_programming_lang...
A concurrent language is defined as one which uses the concept of simultaneously executing processes or threads of execution as a means of structuring a program.
Откуда полагаем, что тут «simultaneously» может быть «не настоящая».
То есть если не may, то point не теряется, так как суть в структуре программ.
A parallel language is able to express programs that are executable on more than one processor.
А параллелизм должен быть настоящим, то есть должно быть задействовано более одного физического вычислителя и должен быть контроль за тем кто где выполняется.
Тут можно взять can, и если не can, то весь point теряется (кто будет использовать OpenMP на одном ядре?), только в качестве незапланированного поведения (выявляемого профилированием), так что не should/shall.
Both types are listed as concurrency is a useful tool in expressing parallelism, but it is not necessary.
anonymous говорил про семантику — как минимум семантически в «конкурентном» языке должна быть нотация для (денотации) p | q (и !p), сообщения или общие ресурсы уже опциональны. Что будет делать планировщик уже не важно — регистрировать процессы по ядрам/нодам и на каждом переключать их или переключать задачи в последовательном режиме на одном вычислителе.
Для «параллельности» аналогичная денотация f on A | g on B должна предполагать именно железно параллельное выполнение f и g на A и B. Повыше уровнем может быть !f, а f[g] может неявно компилироваться в f | g.
Ещё говорят, что «конкурентность» индетерминированна, а «параллельность» — детерминированна.
Для примера — в Haskell есть p >> forkIO q для p | q (forkIO p для !p) и f `seq` g для f | g. Там это совсем разные вещи. Конечно, f `seq` g не даёт точных гарантий, да и ядро может быть одно, но в целом оно «работает».
В C++ есть std::thread и OpenMP, TBB (parallel_ и concurrent_).
Ещё говорят про coarse-grained concurrency и fine-grained parallelism.
Последнее (http://en.wikipedia.org/wiki/Cilk — Paradigm(s): parallel, Categories: Concurrent programming languages o_0) — с одной стороны spawn, с другой — determinism и sync, то есть параллелизм в овечьей шкуре :)