ПредишенСледващото

> Необходимостта да се откажем да получите дълъг сън и работа дълго мрежа

Той не може, това е смисълът възли (или дори libev), всяка от които IO-операция делегирани на друга тема в "изчислителни възли" потока, всъщност, са само kalbeki (изрично, включително таймерите и подразбиращ се).

> Реално време флаг преди всяко очакват убива всички решения елегантност

В друг начин, това не е така, защото никой друг няма да може да се провери необходимостта от спиране, Нода (или V8) еднонишкови, и в много изчислителна "непрекъсната" функция няма да бъде в състояние да се намеси дори манипулатор събитие (например чрез сигнал от IO или съседните worker`s).

Ако имате нужда от много време, но прекъсна изчисление, да ги представи за работник (с помощта на клъстер модул, например), и да убие един работник, ако е необходимо (възстановяване).

Тъмната дупка. опитайте и в C ++, за да се разбере какво многонишкова програмиране, мутекс, критичните участъци, семафори. После още един шанс или Smalltolk Erlang, се опитаме да разберем другия актьор модел многозадачност парадигма, например. И се връща на програмата с възел с любов, а не да ги вика патериците си, защото след като някои ученик каза така, след като не успя в главата му, за да се поберат повече от два подхода за решаване на абстрактен проблем :).

napa3um. вие казвате какво боклук, какво означава "не може" в горния пример се реализира чрез таймер за заспиване + PROMIS. Сега си представете, че във функцията на асинхронен, ти заспа в продължение на 60 секунди, а в основния поток (или от друга асинхронен функция) ще трябва да се откажем асинхронен функция и почистване на боклука?

Михаил. вече отговорих на въпроса ви. Ако функцията е нещо непрекъснато изчислява, а след това го спре от същия поток няма да работи, тъй като има само тази функция се оценява (дори kalbeki на IO-събития или времеви събития не може да бъде изпълнена, ако функцията не е само по себе си всички асинхронни операции). В този случай, единственият начин да се прекъсне изчисляване - за да ги доведе до работник, както и да заковат работник, ако е необходимо. Ако функцията не изчислява нищо, а само в очакване на събитието от таймера (в таймерите възли не са замразени поток, но само предизвика kalbeki в определено време), а след това да отмени изпълнението на този изчакване е достатъчно, за да унищожи clearTimeout на таймера извикване на функция. Не се колебайте да неразбрани нещо, асинхронен модел изпълнение - не толкова проста тема и изисква не само теория, но и практика, за да "просветлено разбиране" :).

napa3um. Благодаря, че изчистени! Сега това, което правя е осветен. След това виждам, че не е необходимо да се продължи дискусията с вас :) въпреки че може да ме освети, и предлагат красива решение като функция асинхронен прекъсване където 5 фишове между 5 и TCP връзки. Но, моля, не се изрина техните изчисления на работника и тежки, което всъщност не е

"Приятно ми решение като прекъсване на асинхронен функцията, в която 5 фишове и между 5 TCP връзки" - за унищожаване на таймера, което създава вашия "приплъзване" (с изключение на таймера, създадена в дрямка, в една и съща външна променлива, свързана с конкретна функция, която искате да "разбие" и след това се обадете на clearTimeout, когато искате да се прекъсне функцията). Ако не искате да се върне на работника.

В този случай ще трябва да така фундаментално погрешно подход е супер клъстер и да ви помогне.
Променете вашия подход, да направи принципа на събитието Loop (като Nginx е така, тъй като в възел базиран), а след това ще се нуждаят от сън, и асинхронни Worker себе си ще получите необходимите сигнали. 10k държави (без работа) могат да бъдат обслужвани от няколко работници, желязо, без компромис с качеството. Ние не трябва да забравяме, че в действителност само една операция се извършва от процесора, просто трябва да се следи състоянието и никой не си прави труда да се смесват в състоянието на сигнала за прекъсване, сигналът да мине през сто или две контур-и и м. Погледнете внимателно в методиката на "реактивен програмиране" (RxJS). В същото време реши проблема, който все още не е имал време да се помисли - организацията разпределя "за четене и запис": да се осигури 10k данни процеси, ще трябва да "дръпне" на потока от данни от потока и след това "дърпане" на данните за всеки един от процесите. Не е трудно да се отгатне, че всеки процес трябва да предприеме нещо някъде, и произвежда някои данни, която също е някъде да се прибират. За да направите това, вие не трябва да се дори 2 × 10k процеси?

Вие нямате "Благодат решения", защото няма решение като такъв :(

Не да пробие мозъците на Rx - тук shapargalka

Дори преди 25 години, учители програмиране на това използването на преките преходи и функция noop (сън) - просто означава, че вие ​​не знаете как да програмирате Нихром. И на първо място - правото да поставя проблема и да избера най-подходящия начин за решаване.

можете да продължите да се опита да каже на своя опит на PHP, за да учат и наставя и други, но моля, ако не разполагате с решение по предмета (абортира асинхронен функция навън) - подмине, не покажат своята некомпетентност

Четене: korutiny, зелени нишки, тук е пример на питон / gevent www.gevent.org/gevent.html (метод убие)
анулиране (отмените / убийство / хвърляне) се осъществява по един или друг във всички нормални библиотеки форма, например в една и съща синя птица: bluebirdjs.com/docs/api/cancellation.html - но това е патерица, защото трябва да се запитаме отмените-обаждане за всяка транзакция представлява интерес за нас

В отговор на собствения си въпрос от първия пост - в момента в Спик JS няма механизъм за премахване на асинхронен функция
но има решение, ние сме склонни да приложат с отворен код в библиотеката си към възела (най-добрите влакна / libcoro)

Подкрепете проекта - споделете линка, благодаря!