{"title":"阻塞与非阻塞进程同步:实现分析","authors":"V. Nazaruk, P. Rusakov","doi":"10.2478/v10143-011-0033-2","DOIUrl":null,"url":null,"abstract":"Blocking and Non-Blocking Process Synchronization: Analysis of Implementation —In computer programs with multiple processes, inter-process communication is of high importance. One of its main aspects is process synchronization, which can be divided into two classes: blocking and non-blocking. Blocking synchronization is simpler and mostly used; however, non-blocking synchronization allows avoiding some negative effects. In this paper, there is discussed the logic of widespread process synchronization mechanisms and is analyzed the support of these mechanisms in different platforms. Bloķējošā un nebloķējošā procesu sinhronizācija: implementēšanas analīze Mūsdienās laiksakritīgās skaitļošanas izmantošana strauji palielinās. Šāda skaitļošana paredz skaitļošanas uzdevumu sadalīšanu vairākos procesos (vai pavedienos). Datorprogrammās ar vairākiem procesiem starpprocesu komunikācijai ir liela nozīme. Viena no būtiskiem starpprocesu komunikācijas mehānismu klasēm ir procesu sinhronizācijas algoritmi. Piemēram, var runāt par semaforiem, nosacījuma mainīgajiem, satikšanām. Procesu sinhronizācijas algoritmi var tikt iedalīti divās klasēs: bloķējošie un nebloķējošie algoritmi; turklāt, katrai no šīm klasēm ir savas priekšrocības un savi trūkumi. Tā, atšķirībā no bloķējošās sinhronizācijas, nebloķējošās sinhronizācijas algoritmu lietošana garantē to, ka sistēmā nekad neparādīsies strupsaķere — sistēmas progress tiek garantēts katra laika momentā. Daudzās modernajās programmēšanas valodās un programmatūras platformās eksistē daži iebūvēti procesu sinhronizācijas mehānismi. Tādējādi, izvēlētā programmēšanas valoda vai platforma noteiktā mērā ietekmē sinhronizācijas mehānismu (kā arī citu starpprocesu komunikācijas mehānismu) izmantošanu. Viens no šī raksta uzdevumiem ir procesu sinhronizācijas mehānismu klašu analīze un salīdzināšana. Otrs uzdevums ir analizēt procesu sinhronizācijas algoritmu atbalstu dažādās modernajās objektorientētajās programmēšanas valodās (C#, Java, C++u. c.) un aparatūras platformās. Pēdējais attiecas uz nebloķējošās sinhronizācijas algoritmiem. Rakstā arī tiek noraksturotas grafisko procesoru, kas atbalsta universālskaitļošanas tehnologiju GPGPU, iespējas procesu sinhronizācijas kontekstā. Блокирующая и неблокирующая синхронизация процессов: анализ реализации В наши дни стремительно возрастает использование параллельных вычислений.Это подразумевает разделение вычислительного задания на несколько процессов (или потоков). Важную роль в компьютерных программах с несколькими процессами играет коммуникация между соответствующими структурными единицами. Один из основных классов механизмов межпроцессного взаимодействия - алгоритмы синхронизации процессов. Напри-мер, можно говорить о семафорах, условных переменных, рандеву. Алгоритмы синхронизации процессов могут подразделяться на два класса: блоки-рующие и неблокирующие алгоритмы;при этом каждый из этих классов имеет свои преимущества и недостатки. Так, в противоположность блокиру-ющей синхронизации, использование алгоритмов неблокирующей синхронизации обеспечивает отсутствие тупиковых ситуаций - т. е., в любое вре- мя гарантирован прогресс на уровне системы. Во многих современных языках программирования и программных платформах существуют некоторые встроенные механизмы синхронизации процессов.Следовательно, выбранный язык программирования или платформа в некоторой степени влияет на использование механизмов синхронизации (также как и других механизмов межпроцессной коммуникации). Одной из задач данной статьи является анализ и сравнение классов механизмов синхронизации процессов. Другая задача заключается в анализе поддержки алгоритмов синхронизации про-цессов в различных современных объектно-ориентированных языках программирования (С#, Java, C++ и др.) и аппаратных платформах. Последнее относится к неблокирующим алгоритмам синхронизации. В статье также приводится характеристика возможностей графических процессоров, под-держивающих технологию произвольных вычислений GPGPU, в контексте синхронизации процессов.","PeriodicalId":211660,"journal":{"name":"Sci. J. Riga Tech. Univ. Ser. Comput. Sci.","volume":"102 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"3","resultStr":"{\"title\":\"Blocking and Non-Blocking Process Synchronization: Analysis of Implementation\",\"authors\":\"V. Nazaruk, P. Rusakov\",\"doi\":\"10.2478/v10143-011-0033-2\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"Blocking and Non-Blocking Process Synchronization: Analysis of Implementation —In computer programs with multiple processes, inter-process communication is of high importance. One of its main aspects is process synchronization, which can be divided into two classes: blocking and non-blocking. Blocking synchronization is simpler and mostly used; however, non-blocking synchronization allows avoiding some negative effects. In this paper, there is discussed the logic of widespread process synchronization mechanisms and is analyzed the support of these mechanisms in different platforms. Bloķējošā un nebloķējošā procesu sinhronizācija: implementēšanas analīze Mūsdienās laiksakritīgās skaitļošanas izmantošana strauji palielinās. Šāda skaitļošana paredz skaitļošanas uzdevumu sadalīšanu vairākos procesos (vai pavedienos). Datorprogrammās ar vairākiem procesiem starpprocesu komunikācijai ir liela nozīme. Viena no būtiskiem starpprocesu komunikācijas mehānismu klasēm ir procesu sinhronizācijas algoritmi. Piemēram, var runāt par semaforiem, nosacījuma mainīgajiem, satikšanām. Procesu sinhronizācijas algoritmi var tikt iedalīti divās klasēs: bloķējošie un nebloķējošie algoritmi; turklāt, katrai no šīm klasēm ir savas priekšrocības un savi trūkumi. Tā, atšķirībā no bloķējošās sinhronizācijas, nebloķējošās sinhronizācijas algoritmu lietošana garantē to, ka sistēmā nekad neparādīsies strupsaķere — sistēmas progress tiek garantēts katra laika momentā. Daudzās modernajās programmēšanas valodās un programmatūras platformās eksistē daži iebūvēti procesu sinhronizācijas mehānismi. Tādējādi, izvēlētā programmēšanas valoda vai platforma noteiktā mērā ietekmē sinhronizācijas mehānismu (kā arī citu starpprocesu komunikācijas mehānismu) izmantošanu. Viens no šī raksta uzdevumiem ir procesu sinhronizācijas mehānismu klašu analīze un salīdzināšana. Otrs uzdevums ir analizēt procesu sinhronizācijas algoritmu atbalstu dažādās modernajās objektorientētajās programmēšanas valodās (C#, Java, C++u. c.) un aparatūras platformās. Pēdējais attiecas uz nebloķējošās sinhronizācijas algoritmiem. Rakstā arī tiek noraksturotas grafisko procesoru, kas atbalsta universālskaitļošanas tehnologiju GPGPU, iespējas procesu sinhronizācijas kontekstā. Блокирующая и неблокирующая синхронизация процессов: анализ реализации В наши дни стремительно возрастает использование параллельных вычислений.Это подразумевает разделение вычислительного задания на несколько процессов (или потоков). Важную роль в компьютерных программах с несколькими процессами играет коммуникация между соответствующими структурными единицами. Один из основных классов механизмов межпроцессного взаимодействия - алгоритмы синхронизации процессов. Напри-мер, можно говорить о семафорах, условных переменных, рандеву. Алгоритмы синхронизации процессов могут подразделяться на два класса: блоки-рующие и неблокирующие алгоритмы;при этом каждый из этих классов имеет свои преимущества и недостатки. Так, в противоположность блокиру-ющей синхронизации, использование алгоритмов неблокирующей синхронизации обеспечивает отсутствие тупиковых ситуаций - т. е., в любое вре- мя гарантирован прогресс на уровне системы. Во многих современных языках программирования и программных платформах существуют некоторые встроенные механизмы синхронизации процессов.Следовательно, выбранный язык программирования или платформа в некоторой степени влияет на использование механизмов синхронизации (также как и других механизмов межпроцессной коммуникации). Одной из задач данной статьи является анализ и сравнение классов механизмов синхронизации процессов. Другая задача заключается в анализе поддержки алгоритмов синхронизации про-цессов в различных современных объектно-ориентированных языках программирования (С#, Java, C++ и др.) и аппаратных платформах. Последнее относится к неблокирующим алгоритмам синхронизации. В статье также приводится характеристика возможностей графических процессоров, под-держивающих технологию произвольных вычислений GPGPU, в контексте синхронизации процессов.\",\"PeriodicalId\":211660,\"journal\":{\"name\":\"Sci. J. Riga Tech. Univ. Ser. Comput. Sci.\",\"volume\":\"102 1\",\"pages\":\"0\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"1900-01-01\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"3\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"Sci. J. Riga Tech. Univ. Ser. Comput. Sci.\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/10.2478/v10143-011-0033-2\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"Sci. J. Riga Tech. Univ. Ser. Comput. Sci.","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.2478/v10143-011-0033-2","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
Blocking and Non-Blocking Process Synchronization: Analysis of Implementation
Blocking and Non-Blocking Process Synchronization: Analysis of Implementation —In computer programs with multiple processes, inter-process communication is of high importance. One of its main aspects is process synchronization, which can be divided into two classes: blocking and non-blocking. Blocking synchronization is simpler and mostly used; however, non-blocking synchronization allows avoiding some negative effects. In this paper, there is discussed the logic of widespread process synchronization mechanisms and is analyzed the support of these mechanisms in different platforms. Bloķējošā un nebloķējošā procesu sinhronizācija: implementēšanas analīze Mūsdienās laiksakritīgās skaitļošanas izmantošana strauji palielinās. Šāda skaitļošana paredz skaitļošanas uzdevumu sadalīšanu vairākos procesos (vai pavedienos). Datorprogrammās ar vairākiem procesiem starpprocesu komunikācijai ir liela nozīme. Viena no būtiskiem starpprocesu komunikācijas mehānismu klasēm ir procesu sinhronizācijas algoritmi. Piemēram, var runāt par semaforiem, nosacījuma mainīgajiem, satikšanām. Procesu sinhronizācijas algoritmi var tikt iedalīti divās klasēs: bloķējošie un nebloķējošie algoritmi; turklāt, katrai no šīm klasēm ir savas priekšrocības un savi trūkumi. Tā, atšķirībā no bloķējošās sinhronizācijas, nebloķējošās sinhronizācijas algoritmu lietošana garantē to, ka sistēmā nekad neparādīsies strupsaķere — sistēmas progress tiek garantēts katra laika momentā. Daudzās modernajās programmēšanas valodās un programmatūras platformās eksistē daži iebūvēti procesu sinhronizācijas mehānismi. Tādējādi, izvēlētā programmēšanas valoda vai platforma noteiktā mērā ietekmē sinhronizācijas mehānismu (kā arī citu starpprocesu komunikācijas mehānismu) izmantošanu. Viens no šī raksta uzdevumiem ir procesu sinhronizācijas mehānismu klašu analīze un salīdzināšana. Otrs uzdevums ir analizēt procesu sinhronizācijas algoritmu atbalstu dažādās modernajās objektorientētajās programmēšanas valodās (C#, Java, C++u. c.) un aparatūras platformās. Pēdējais attiecas uz nebloķējošās sinhronizācijas algoritmiem. Rakstā arī tiek noraksturotas grafisko procesoru, kas atbalsta universālskaitļošanas tehnologiju GPGPU, iespējas procesu sinhronizācijas kontekstā. Блокирующая и неблокирующая синхронизация процессов: анализ реализации В наши дни стремительно возрастает использование параллельных вычислений.Это подразумевает разделение вычислительного задания на несколько процессов (или потоков). Важную роль в компьютерных программах с несколькими процессами играет коммуникация между соответствующими структурными единицами. Один из основных классов механизмов межпроцессного взаимодействия - алгоритмы синхронизации процессов. Напри-мер, можно говорить о семафорах, условных переменных, рандеву. Алгоритмы синхронизации процессов могут подразделяться на два класса: блоки-рующие и неблокирующие алгоритмы;при этом каждый из этих классов имеет свои преимущества и недостатки. Так, в противоположность блокиру-ющей синхронизации, использование алгоритмов неблокирующей синхронизации обеспечивает отсутствие тупиковых ситуаций - т. е., в любое вре- мя гарантирован прогресс на уровне системы. Во многих современных языках программирования и программных платформах существуют некоторые встроенные механизмы синхронизации процессов.Следовательно, выбранный язык программирования или платформа в некоторой степени влияет на использование механизмов синхронизации (также как и других механизмов межпроцессной коммуникации). Одной из задач данной статьи является анализ и сравнение классов механизмов синхронизации процессов. Другая задача заключается в анализе поддержки алгоритмов синхронизации про-цессов в различных современных объектно-ориентированных языках программирования (С#, Java, C++ и др.) и аппаратных платформах. Последнее относится к неблокирующим алгоритмам синхронизации. В статье также приводится характеристика возможностей графических процессоров, под-держивающих технологию произвольных вычислений GPGPU, в контексте синхронизации процессов.