From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.6 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.1 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 4C2AB1F6AC for ; Thu, 5 Jul 2018 08:33:50 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 28AF1120BE2; Thu, 5 Jul 2018 17:33:47 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id C0C5C120BDA for ; Thu, 5 Jul 2018 17:33:43 +0900 (JST) Received: by filter0094p3mdw1.sendgrid.net with SMTP id filter0094p3mdw1-14752-5B3DD7E3-19 2018-07-05 08:33:39.7061903 +0000 UTC Received: from herokuapp.com (ec2-54-80-62-90.compute-1.amazonaws.com [54.80.62.90]) by ismtpd0005p1iad1.sendgrid.net (SG) with ESMTP id elBYq9VfRRur__Xsx4eXWQ Thu, 05 Jul 2018 08:33:39.662 +0000 (UTC) Date: Thu, 05 Jul 2018 08:33:40 +0000 (UTC) From: funny.falcon@gmail.com To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 63195 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 14736 X-Redmine-Issue-Author: ioquatix X-Redmine-Sender: funny_falcon X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: ync6xU2WACa70kv/Ymy4QrNMhiuLXJG8OTL2vJD1yS7ZGl6GyPrtNRQsyph0u7z+zHAo4thMuXAeA1 VTk54Gt0goXIiJH4aoVzdoEhH1QUDF89EYs+0woGkcbiImzZhgYufYyqHUWXL6MMXXyJntctqfso0k scm08csdIJDOh7NU0DSOogI1JaPnH0EYFnGNoBJPf1BGpni149Fhg3066A== X-ML-Name: ruby-core X-Mail-Count: 87808 Subject: [ruby-core:87808] [Ruby trunk Feature#14736] Thread selector for flexible cooperative fiber based concurrency X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #14736 has been updated by funny_falcon (Yura Sokolov). I've shown `to_enum(:aga).to_a` to present the place where I wasn't right. But if you look at your own second example, you will see that it doesn't do what it should do (if `Fiber.yield` is replaced with yield point of your scheduler, for example, with `task.sleep(0.01)` or .socket.read`), because yield point should not affect `e.next`. And you've already shown this in third example. Scheduler should use `Fiber.transfer`, because it is really scheduling primitive in its nature, and because it is almost unknown and almost nowhere used. ---------------------------------------- Feature #14736: Thread selector for flexible cooperative fiber based concurrency https://bugs.ruby-lang.org/issues/14736#change-72825 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- Ruby concurrency can be greatly enhanced by concurrent, deterministic IO. Fibers have been shown many times to be a great abstraction for this purpose. The retain normal code flow and don't require any kind of Thread synchronisation. They are enjoyable to write code with because you don't have to concern yourself with thread synchronisation or other complicated issues. The basic idea is that if some operation would block, it yields the Fiber, and other Fibers within the thread can continue to execute. There are a number of ways to implement this. Here is a proof of concept to amend the existing `rb_io_wait_readable`/`rb_io_wait_writable`. https://github.com/ruby/ruby/pull/1870 This design minimally affects the Ruby implementation and allows flexibility for selector implementation. With a small amount of work, we can support EventMachine (65 million downloads), NIO4r (21 million downloads). It would be trivial to back port. This PR isn't complete but I am seeking feedback. If it's a good idea, I will do my best to see it through to completion, including support for EventMachine and NIO4r. ---Files-------------------------------- port_scanner_threadlet.rb (925 Bytes) -- https://bugs.ruby-lang.org/