LINUX.ORG.RU

История изменений

Исправление 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, то есть параллелизм в овечьей шкуре :)