Кіріспе
Тапсырманы тізбектеп орындамайтын мүмкіндік. Компьютер ғылымында, бір мезгілделік – бағдарламаның, алгоритмнің немесе мәселенің әртүрлі бөліктерінің немесе бірліктерінің нәтижеге әсер етпей, ретсіз немесе ішінара ретпен орындалу қабілеті. Бұл бір мезгілдегі бірліктердің қатар орындалуына мүмкіндік береді, бұл көп процессорлы және көп ядролы жүйелерде орындалудың жалпы жылдамдығын едәуір арттыра алады. Техникалық тұрғыдан алғанда, бір мезгілдестік – бағдарламаның, алгоритмнің немесе мәселенің тәуелсіз немесе ішінара реттелген компоненттерге немесе есептеу бірліктеріне бөлінуі. Роб Пайк айтқандай, бір мезгілдестік – тәуелсіз орындалатын есептеулердің жиынтығы, ал бір мезгілдестік пен қатарластыру – екі бөлек ұғым: бір мезгілдестік – көп нәрсені бір уақытта басқару туралы, ал қатарластыру – көп нәрсені бір уақытта жасау туралы. Бір мезгілдестік – құрылымға қатысты, ал қатарластыру – орындалуға қатысты, бір мезгілдестік мәселені шешу үшін шешімді құрылымдаудың жолын ұсынады, оны (бірақ міндетті емес) қатарластыруға болады. Жалпы бір мезгілдегі есептеулер үшін бірқатар математикалық модельдер әзірленді, соның ішінде Петри торлары, процесс есептеулері, параллель кездейсоқ кіру машинасының моделі, актер моделі және Reo координация тілі.
In computer science, concurrency is the ability of different parts or units of a program, algorithm, or problem to be executed out of order or in partial order, without affecting the outcome. This allows for parallel execution of the concurrent units, which can significantly improve overall speed of the execution in multi processor and multi core systems. In more technical terms, concurrency refers to the decomposability of a program, algorithm, or problem into order independent or partially ordered components or units of computation. According to Rob Pike, concurrency is the composition of independently executing computations, and concurrency is not parallelism: concurrency is about dealing with lots of things at once but parallelism is about doing lots of things at once. Concurrency is about structure, parallelism is about execution, concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable. A number of mathematical models have been developed for general concurrent computation including Petri nets, process calculi, the parallel random access machine model, the actor model and the Reo Coordination Language.
Мәселелер
Бір мезгілде жұмыс істейтін жүйедегі есептеулер орындалу барысында бір-бірімен өзара әрекеттесе алатындықтан, жүйедегі мүмкін болатын орындалу жолдарының саны өте көп болуы мүмкін, ал нәтижесі болжамсыз болуы мүмкін. Ортақ ресурстарды бір мезгілде пайдалану болжамсыздыққа алып келуі мүмкін, соның салдарынан тұйыққа тірелу және ресурстардың жетіспеуі сияқты мәселелер туындауы мүмкін. Бір мезгілде жұмыс істейтін жүйелерді жобалау жиі олардың орындалуын, дерек алмасуын, жадты бөлуді және орындалу кестесін үйлестіру үшін сенімді әдістерді табуды қажет етеді, бұл жауап беру уақытын қысқартуға және өнімділікті арттыруға мүмкіндік береді.
Теория
Конкуренттік теория теориялық компьютерлік ғылымда белсенді зерттеу саласы болып табылады. Алғашқы ұсыныстардың бірі – Карл Адам Петридің 1960 жылдардың басындағы Петри торлары туралы маңызды еңбегі. Одан бергі жылдарда бірмезгілділік туралы модельдеу және логикалық қорытындылар жасау үшін көптеген формализмдер әзірленді.
Логика
Бір мезгілдегі жүйелерді талдауға көмектесу үшін әртүрлі уақыттық логика түрлерін қолдануға болады. Мұндай логикалардың кейбіреуі, мысалы, сызықтық уақыт логикасы және есептеу ағашы логикасы, бір мезгілдегі жүйенің өте алатын күйлер тізбегі туралы тұжырымдар жасауға мүмкіндік береді. Ал басқалары, мысалы, әрекет есептеу ағашы логикасы, Хеннесси-Милнер логикасы және Лампорттың әрекеттер уақыт логикасы, өз тұжырымдарын күйлердегі өзгерістерден (әрекеттер тізбегінен) құрайды. Бұл логикалардың басты қолданылуы – бір мезгілдегі жүйелерге арналған техникалық талаптарды жазу.
Практика
Бір мезгілдегі бағдарламалау – бір мезгілдегі жүйелерді іске асыруға қолданылатын бағдарламалау тілдері мен алгоритмдерді қамтиды. Бір мезгілдегі бағдарламалау, әдетте, параллель бағдарламалаудан гөрі жалпырақ болып саналады, себебі ол байланыс пен өзара әрекеттесудің кездейсоқ және динамикалық үлгілерін қамти алады, ал параллель жүйелерде көбінесе алдын ала анықталған және жақсы құрылымдалған байланыс үлгісі болады. Бір мезгілдегі бағдарламалаудың негізгі мақсаттары – дұрыстық, өнімділік және сенімділік. Операциялық жүйелер мен деректер базасын басқару жүйелері сияқты бір мезгілде жұмыс істейтін жүйелер, әдетте, шексіз жұмыс істеуге, соның ішінде қателерден автоматты түрде қалпына келуге және күтпеген жерден тоқтамауға арналған (Бір мезгілде жұмыс істеуді бақылауға қараңыз). Кейбір бір мезгілдегі жүйелер ашық бір мезгілдестіктің бір түрін іске асырады, онда бір мезгілдегі есептеу бірліктері бір ресурс үшін бәсекелесіп, оны бөлісе алады, бірақ осы бәсекелестік пен бөлісудің күрделілігі бағдарламашыдан жасырылады. Ортақ ресурстарды пайдаланатындықтан, бір мезгілдегі жүйелер, әдетте, осы ресурстарға қол жеткізуді бақылау үшін олардың іске асырылуында (көбінесе негізгі аппараттық құралда) төрешінің болуын қажет етеді. Төрешілерді пайдалану бір мезгілдегі есептеуде белгісіздік мүмкіндігін тудырады, бұл практикаға, соның ішінде дұрыстық пен өнімділікке үлкен әсер етеді. Мысалы, төрелік шексіз нондерминизмді енгізеді, бұл модельді тексеру мәселелерін тудырады, өйткені ол күй кеңістігінде жарылысқа алып келеді және тіпті модельдердің шексіз күйлеріне ие болуына себеп болуы мүмкін. Бір мезгілдегі бағдарламалаудың кейбір модельдеріне копроцестер мен детерминистік бір мезгілдестік кіреді. Бұл модельдерде басқару тізбектері өздерінің уақыт тілімдерін жүйеге немесе басқа процеске нақты түрде береді.