{"id":34273,"date":"2019-10-31T21:57:22","date_gmt":"2019-10-31T18:57:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/asinhronnoe-programmirovanie-polnyj-kurs\/"},"modified":"2019-10-31T21:57:22","modified_gmt":"2019-10-31T18:57:22","slug":"asinhronnoe-programmirovanie-polnyj-kurs","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs","title":{"rendered":"Programmation asynchrone (cours complet)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLHhi8ymDMrQZ0MpTsmi54OkjTbo0cjU1T\"><img decoding=\"async\" alt=\"Programmation asynchrone (cours complet)\" src=\"\/wp-content\/uploads\/2019\/05\/05e2e5ca44a35d173d006faafd6d18c0.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>La programmation asynchrone est devenue ces derni\u00e8res ann\u00e9es un domaine tout aussi d\u00e9velopp\u00e9 que la programmation parall\u00e8le classique, et dans le monde de JavaScript, tant dans les navigateurs qu'en Node.js, comprendre ses techniques a occup\u00e9 une place centrale dans la formation de la vision des d\u00e9veloppeurs. Je vous propose un cours complet et le plus d\u00e9taill\u00e9 possible expliquant toutes les m\u00e9thodes largement r\u00e9pandues de programmation asynchrone, les adaptateurs entre elles et les espaces auxiliaires. \u00c0 l'heure actuelle, il se compose de 23 cours, 3 pr\u00e9sentations et 28 d\u00e9p\u00f4ts avec de nombreux exemples de code sur GitHub. Environ 17 heures de vid\u00e9os au total : <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLHhi8ymDMrQZ0MpTsmi54OkjTbo0cjU1T\">lien vers la playlist<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4 id=\"poyasneniya-k-sheme\">Explications du sch\u00e9ma<\/h4>\n<p><\/p>\n<p>Le sch\u00e9ma (ci-dessus) montre les relations entre les diff\u00e9rentes mani\u00e8res de g\u00e9rer l'asynchronicit\u00e9. Les blocs color\u00e9s se rapportent \u00e0 la programmation asynchrone, tandis que les m\u00e9thodes de programmation parall\u00e8le (s\u00e9maphores, mutex, barri\u00e8res, etc.) sont repr\u00e9sent\u00e9es en noir et blanc, ainsi que les r\u00e9seaux de P\u00e9tri, qui, tout comme la programmation asynchrone et le mod\u00e8le des acteurs, sont diff\u00e9rentes approches pour r\u00e9aliser des calculs parall\u00e8les (elles sont pr\u00e9sent\u00e9es sur le sch\u00e9ma uniquement pour d\u00e9finir avec pr\u00e9cision la place de la programmation asynchrone). Le mod\u00e8le des acteurs est li\u00e9 \u00e0 la programmation asynchrone car la mise en \u0153uvre des acteurs sans multithreading est \u00e9galement valable et sert \u00e0 structurer le code asynchrone. Les lignes en pointill\u00e9s relient les \u00e9v\u00e9nements et la file d'attente concurrente aux callbacks car ces abstractions sont bas\u00e9es sur les callbacks, mais forment n\u00e9anmoins des approches qualitativement nouvelles.<\/p>\n<p><\/p>\n<h4 id=\"temy-lekciy\">Sujets des cours<\/h4>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/hY6Z6qNYzmc\">1. Programmation asynchrone (aper\u00e7u)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/LK2jveAnRNg\">2. Minuteurs, d\u00e9lais et EventEmitter<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/z8Hg6zgi3yQ\">3. Programmation asynchrone avec des callbacks<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/wYA2cIRYLoA\">4. It\u00e9ration asynchrone non bloquante<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/XQ94wQc-erU\">5. \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 async.js<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/RMl4r6s1Y8M\">6. Asynchronicit\u00e9 avec les promesses<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/Jdf_tZuJbHI\">7. Fonctions asynchrones et gestion des erreurs<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/76k6_YkYRmU\">8. Adaptateurs asynchrones : promisify, callbackify, asyncify<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/tgodt1JL6II\">9. Collecteurs de donn\u00e9es asynchrones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/1Ml5NE2fsZ8\">10. Erreurs non g\u00e9r\u00e9es dans les promesses<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/pfiHTx3j87Y\">11. Probl\u00e8me de la trace de pile asynchrone<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/kvNm9D32s8s\">12. G\u00e9n\u00e9rateurs et g\u00e9n\u00e9rateurs asynchrones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/rBGFlWpVpGs\">13. It\u00e9rateurs et it\u00e9rateurs asynchrones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/T8fXlnqI4Ws\">14. Annulation des op\u00e9rations asynchrones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/3ZCrMlMpOrM\">15. Composition de fonctions asynchrones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/DXp__1VNIvI\">16. Thenable et await l\u00e9ger<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/Lg46AH8wFvg\">17. File d'attente asynchrone concurrente<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/leR5sXRkuJI\">18. Mod\u00e8le de constructeur r\u00e9v\u00e9l\u00e9 (Revealing Constructor)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/22ONv3AGXdk\">19. Future : asynchronicit\u00e9 avec des futures sans \u00e9tat<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/a2fVA1o-ovM\">20. Deferred : asynchronicit\u00e9 avec des deferred avec \u00e9tat<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/xp5MVKEqxY4\">21. Mod\u00e8le d'acteurs (Actor Model)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/_bFXuLcXoXg\">22. Mod\u00e8le Observateur (Observer + Observable)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/0kcpMAl-wfE\">23. Asynchronisme avec RxJS et flux d'\u00e9v\u00e9nements<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Sous chaque vid\u00e9o, il y a des liens vers des d\u00e9p\u00f4ts contenant des exemples de code, qui sont expliqu\u00e9s dans la vid\u00e9o. J'ai essay\u00e9 de montrer qu'il n'est pas n\u00e9cessaire de r\u00e9duire tout \u00e0 une seule abstraction de l'asynchronicit\u00e9. Il n'existe pas d'approche universelle \u00e0 l'asynchronisme, et pour chaque cas, on peut s\u00e9lectionner les m\u00e9thodes qui permettront d'\u00e9crire du code de mani\u00e8re plus naturelle pour cette t\u00e2che sp\u00e9cifique. Bien s\u00fbr, ce cours sera enrichi et je demande \u00e0 tous de proposer de nouveaux sujets et de contribuer aux exemples de code. L'objectif principal du cours est de montrer comment construire des abstractions d'asynchronisme de l'int\u00e9rieur, et non simplement d'apprendre \u00e0 les utiliser. Pratiquement toutes les abstractions ne proviennent pas de biblioth\u00e8ques, mais sont donn\u00e9es dans leur implementation la plus simple et leur fonctionnement est examin\u00e9 \u00e9tape par \u00e9tape.<\/p>\n<p class=\"for_users_only_msg\">Seuls les utilisateurs enregistr\u00e9s peuvent participer au sondage. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Connectez-vous<\/a><\/noindex>, s'il vous pla\u00eet.<\/p>\n<h2 class=\"default-block__polling-title\">Quelle est votre opinion sur le cours ?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Je vais regarder tout le cours<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Je vais regarder de mani\u00e8re s\u00e9lective<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Une seule approche me suffit<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Je vais contribuer au cours<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Je ne m'int\u00e9resse pas \u00e0 l'asynchronisme<\/p>\n<\/li>\n<\/ul>\n<p>    8 utilisateurs ont vot\u00e9. 1 utilisateur s'est abstenu.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/452974\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u043b\u043e \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u044b\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0447\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0432 \u043c\u0438\u0440\u0435 JavaSript, \u043a\u0430\u043a \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445, \u0442\u0430\u043a \u0438 \u0432 Node.js, \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u043f\u0440\u0438\u0435\u043c\u043e\u0432 \u0437\u0430\u043d\u044f\u043b\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u0440\u043e\u0432\u043e\u0437\u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u044b\u0439 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25850,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34273","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:57:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:57:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Programmation asynchrone (cours complet) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441) | ProHoster","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:57:22+00:00","article:modified_time":"2019-10-31T18:57:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34273","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 18:33:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:25:30","updated":"2026-01-21 18:33:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/34273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=34273"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/34273\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/25850"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=34273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=34273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=34273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}