Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Бағдарламалау тілінің ерекшелігі
Programming idiom
Компьютерлік бағдарламалауда шексіз цикл (немесе үздіксіз цикл) – сыртқы әрекеттен, мысалы, қуатты өшіру немесе ашаны суыру сияқты тоқтатылмаса, мәңгі жалғасатын нұсқаулар тізбегі. Ол қасақана жасалған болуы мүмкін. Компьютерлік бағдарламада шексіз циклдің болуын анықтауға арналған жалпы алгоритм жоқ; бұл тоқтату есебі (немесе тоқтату мәселесі).
In computer programming, an infinite loop (or endless loop) is a sequence of instructions that, as written, will continue endlessly, unless an external intervention occurs, such as turning off power via a switch or pulling a plug. It may be intentional. There is no general algorithm to determine whether a computer program contains an infinite loop or not; this is the halting problem.
Егжей-тегжейлер
Шексіз цикл – компьютерлік бағдарламадағы нұсқаулар тізбегі, ол циклдің тоқталу шарты болмағандықтан, орындалуы мүмкін емес шарты болғандықтан немесе циклді қайта бастауға себеп болатын жағдайға байланысты, үздіксіз қайталанады. Ескі операциялық жүйелерде, бірлескен көпміндеттілікте, шексіз циклдер әдетте бүкіл жүйенің жауапсыз болуына әкелетін. Қазіргі кезде кең таралған уақыт үлестірулі көпміндеттілік модельде, шексіз циклдер әдетте бағдарламаның барлық процессор уақытын жұмсайды, бірақ оны пайдаланушы тоқтатуға болады. «Жұмысты күту циклі» кейде «шексіз цикл» деп те аталады. Компьютердің тоқтап қалуының немесе қатып қалуының бір себебі – шексіз циклдер; басқа себептері – жад айырбастау, өзара байланыс тұйықталуы және жадқа рұқсатсыз кіру.
An infinite loop is a sequence of instructions in a computer program which loops endlessly, either due to the loop having no terminating condition, having one that can never be met, or one that causes the loop to start over. In older operating systems with cooperative multitasking, infinite loops normally caused the entire system to become unresponsive. With the now prevalent preemptive multitasking model, infinite loops usually cause the program to consume all available processor time, but can usually be terminated by a user. Busy wait loops are also sometimes called "infinite loops". Infinite loops are one possible cause for a computer hanging or freezing; others include thrashing, deadlock, and access violations.
Қалайтатын және қаламаған цикл
Looping – белгілі бір шарт орындалғанға дейін нұсқаулар жиынтығының қайталануы. Шеңбердің өзіндік ерекшелігіне байланысты шарт ешқашан орындалмаса, шексіз цикл пайда болады.
Looping is repeating a set of instructions until a specific condition is met. An infinite loop occurs when the condition will never be met due to some inherent characteristic of the loop.
Қасақана ілмектеу
Кейбір жағдайларда мұндай әрекет қажет болуы мүмкін. Мысалы, картридждік ойын консольдеріндегі ойындардың негізгі циклында әдетте шығу шарты болмайды, себебі бағдарламаны тоқтатуға операциялық жүйе жоқ; консоль өшірілгенше цикл жалғаса береді. Қазіргі заманғы интерактивті компьютерлер пайдаланушының енгізген мәліметтерін немесе құрылғының белсенділігін үнемі бақылап отыруын қажет етеді, сондықтан құрылғы өшірілгенге немесе қайта қосылғанға дейін жалғасатын шексіз өңдеу циклы болуы тиіс. Мысалы, Apollo Guidance Computer-дегі сыртқы цикл Exec бағдарламасында орналасқан, егер компьютерде басқа жұмыс болмаса, ол "компьютерлік белсенділік" көрсеткішінің жарығын өшіретін қара жұмыс істейтін циклге түседі. Қазіргі заманғы компьютерлер әдетте процессордың немесе аналық платаның сағаттық тізбегін тоқтатпайды, егер олар істен шықса. Оның орнына, олар операторға хабарламалар көрсетіп, қате жағдайына түседі (мысалы, өлімнің көк экраны) және пайдаланушы жалғастыру туралы сұрауға жауап бергенше немесе құрылғыны қайта қосқанша шексіз циклде күтеді.
There are a few situations when this is desired behavior. For example, the games on cartridge based game consoles typically have no exit condition in their main loop, as there is no operating system for the program to exit to; the loop runs until the console is powered off. Modern interactive computers require that the computer constantly be monitoring for user input or device activity, so at some fundamental level there is an infinite processing idle loop that must continue until the device is turned off or reset. In the Apollo Guidance Computer, for example, this outer loop was contained in the Exec program, and if the computer had absolutely no other work to do, it would loop run a dummy job that would simply turn off the "computer activity" indicator light. Modern computers also typically do not halt the processor or motherboard circuit driving clocks when they crash. Instead they fall back to an error condition displaying messages to the operator (such as the blue screen of death), and enter an infinite loop waiting for the user to either respond to a prompt to continue, or reset the device.
Қалқалар
Спинлоктар – бір мезгілде бағдарламалауда ортақ ресурстарды қорғау үшін қолданылатын төмен деңгейдегі синхрондау механизмдері. Дәстүрлі құлыптардан айырмашылығы, құлыпты алу мүмкін болмаған жағдайда жіпті ұйықтатудың орнына, спинлоктар құлып босатылғанша шексіз циклмен қайта-қайта "айналып" отырады. Бұл қасақана шексіз цикл – жіптің құлып күтуге жұмсайтын уақытын азайту және мутекс сияқты жоғары деңгейдегі синхрондау механизмдерінің қосымша шығындарын болдырмау мақсатындағы әдейі жасалған таңдау.
Spinlocks are low level synchronization mechanisms used in concurrent programming to protect shared resources. Unlike traditional locks that put a thread to sleep when it can't acquire the lock, spinlocks repeatedly "spin" in an infinite loop until the lock becomes available. This intentional infinite looping is a deliberate design choice aimed at minimizing the time a thread spends waiting for the lock and avoiding the overhead of higher level synchronisation mechanisms such as mutexes.
Көптірікті
Көп тірісті бағдарламаларда кейбір тірістер шексіз цикл ішінде жұмыс істесе де, бүкіл бағдарлама шексіз циклге тоқтап қалмайды. Егер басты тіріс аяқталып кетсе, процестің барлық тірістері күшпен тоқтатылады, соның салдарынан барлық орындалу тоқтатылып, процесс/бағдарлама аяқталады. Шексіз циклдердегі тірістер "үй шаруашылығы" жұмыстарын атқаруы немесе сокет/кезектен дерек күтіп, тоқтатылған күйде болуы мүмкін, және әр дерек түскен сайын жұмысын жалғастырады.
In multi threaded programs some threads can be executing inside infinite loops without causing the entire program to be stuck in an infinite loop. If the main thread exits, all threads of the process are forcefully stopped, thus all execution ends and the process/program terminates. The threads inside the infinite loops can perform "housekeeping" tasks or they can be in a blocked state waiting for input (from socket/queue) and resume execution every time input is received.
Қасақана емес орама
Көбінесе бұл термин күтілмеген нәтиже туындаған жағдайларда қолданылады; яғни, бұл қателік. Мұндай қателіктерді көбінесе жаңадан бастаған бағдарламашылар жасайды, бірақ тәжірибелі бағдарламашылар да жіберуі мүмкін, себебі олардың себептері өте күрделі болуы мүмкін. Мысалы, бір кең таралған себеп – бағдарламашы тізімделген тізім немесе ағаш сияқты дерек құрылымындағы түйіндер тізбесін итерациялауды жоспарлайды, әрбір түйін үшін цикл кодының бір рет орындалуын күтеді. Дұрыс құрылмаған сілтемелер дерек құрылымында сілтемелік циклды құруы мүмкін, онда бір түйін тізбекте ертерек кездесетін басқа түйінге сілтеме жасайды. Бұл дерек құрылымының бір бөлігін сақинаға айналдырып, қарапайым кодтың мәңгілікке тоқтаусыз жұмыс істеуіне себеп болады. Көптеген шексіз циклдарды кодты мұқият қарап шығу арқылы табуға болады, бірақ берілген бағдарламаның тоқтауын немесе мәңгілікке жұмыс істеуін анықтаудың жалпы әдісі жоқ; бұл тоқтату мәселесінің шешілмейтіндігі.
Most often, the term is used for those situations when this is not the intended result; that is, when this is a bug. Such errors are most common by novice programmers, but can be made by experienced programmers also, because their causes can be quite subtle. One common cause, for example, is that a programmer intends to iterate over sequence of nodes in a data structure such as a linked list or tree, executing the loop code once for each node. Improperly formed links can create a reference loop in the data structure, where one node links to another that occurs earlier in the sequence. This makes part of the data structure into a ring, causing naive code to loop forever. While most infinite loops can be found by close inspection of the code, there is no general method to determine whether a given program will ever halt or will run forever; this is the undecidability of the halting problem.
Тоқтату
Жүйе жауап беретін болса, шексіз циклдерді процеске сигнал жіберу арқылы (мысалы, Unix-тегі SIGINT) немесе процессорға үзіліс жіберу арқылы тоқтатуға болады, бұл ағымдағы процестің тоқтатылуына әкеледі. Мұны тапсырма менеджерінде, терминалда Control+C пернелерінің комбинациясымен немесе kill командасын немесе жүйелік шақыруды пайдалану арқылы жасауға болады. Дегенмен, бұл әрқашан жұмыс істемейді, себебі процесс сигналдарға жауап бермеуі мүмкін немесе процессор үзіліссіз күйде болуы мүмкін, мысалы, Cyrix кома қатесінде (нұсқау құбырындағы үзіліссіз нұсқаулардың қабаттасуынан туындайды). Кейбір жағдайларда SIGKILL сияқты басқа сигналдар да жұмыс істей алады, өйткені олар процестің жауап беруін қажет етпейді, ал кейбір жағдайларда циклді тоқтату үшін жүйені тоқтатудан басқа амал қалмайды.
As long as the system is responsive, infinite loops can often be interrupted by sending a signal to the process (such as SIGINT in Unix), or an interrupt to the processor, causing the current process to be aborted. This can be done in a task manager, in a terminal with the Control C command, or by using the kill command or system call. However, this does not always work, as the process may not be responding to signals or the processor may be in an uninterruptible state, such as in the Cyrix coma bug (caused by overlapping uninterruptible instructions in an instruction pipeline). In some cases other signals such as SIGKILL can work, as they do not require the process to be responsive, while in other cases the loop cannot be terminated short of system shutdown.
Тілдік қолдау
Шексіз циклдерді әр түрлі басқару ағыны құрылымдарын пайдаланып іске асыруға болады. Көбінесе, құрылымдалмаған бағдарламалауда бұл кері секіру (goto) болып табылады, ал құрылымдалған бағдарламалауда бұл ешқашан аяқтамайтын белгісіз цикл (while loop) болып табылады, жағдайды жою арқылы немесе оны нақты түрде `true` деп белгілеу арқылы, мысалы `while (true)`.
Infinite loops can be implemented using various control flow constructs. Most commonly, in unstructured programming this is jump back up (goto), while in structured programming this is an indefinite loop (while loop) set to never end, either by omitting the condition or explicitly setting it to true, as while (true)
Кейбір тілдерде шексіз циклдер үшін арнайы құрылымдар бар, әдетте белгісіз циклдан жағдайды жою арқылы. Мысалдарға Ada (`loop end loop`), Fortran (`DO END DO`), Go (`for {}`), Ruby (`loop do end`) және Rust (`loop {}`) жатады.
Some languages have special constructs for infinite loops, typically by omitting the condition from an indefinite loop. Examples include Ada (loop end loop), Fortran (DO END DO), Go (for { }), Ruby (loop do end), and Rust (loop { }).
Көп тарапты байланыс
Шексіз цикл бірнеше құрылымдардың өзара әрекеттесуінен туындауы мүмкін. Сұранысты түсінбесе, әрқашан қате туралы хабарламамен жауап беретін серверді қарастырайық. Сервердің өзінде шексіз цикл болуы мүмкін болмаса да, екеуден тұратын жүйе (A және B) үздіксіз циклға түсуі мүмкін: егер A B-ден белгісіз типтегі хабар алса, онда A B-ге қате хабарламасымен жауап береді; егер B қате хабарламасын түсінбесе, ол A-ға өзінің қате хабарламасымен жауап береді; егер A B-ден келген қате хабарламасын түсінбесе, ол тағы бір қате хабарламасын жібереді, және т.с.с. Мұндай жағдайдың кең таралған мысалы – электрондық пошта циклы. Электрондық пошта циклының мысалы, егер біреу жауап қайтаруға болмайтын пошта жәшігінен хат алса, ал оның автоматты жауабы қосылған болса. Ол жауап қайтаруға болмайтын пошта жәшігіне жауап береді, соның салдарынан «бұл жауап қайтаруға болмайтын жәшік» деген жауап жіберіледі. Бұл пайдаланушыға жіберіледі, ол автоматты түрде жауап қайтаруға болмайтын пошта жәшігіне жауап береді, және т.с.с.
An infinite loop may be caused by several entities interacting. Consider a server that always replies with an error message if it does not understand the request. Even if there is no possibility for an infinite loop within the server itself, a system comprising two of them (A and B) may loop endlessly: if A receives a message of unknown type from B, then A replies with an error message to B; if B does not understand the error message, it replies to A with its own error message; if A does not understand the error message from B, it sends yet another error message, and so on. One common example of such situation is an email loop. An example of an email loop is if someone receives mail from a no reply inbox, but their auto response is on. They will reply to the no reply inbox, triggering the "this is a no reply inbox" response. This will be sent to the user, who then sends an auto reply to the no reply inbox, and so on and so forth.
Шексіз псевдо-бұғалар
Псевдо шексіз цикл – көрінерінде шексіз, бірақ іс жүзінде өте ұзаққа созылатын цикл.
A pseudo infinite loop is a loop that appears infinite but is really just a very long loop.