From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by yquem.inria.fr (Postfix) with ESMTP id 0B23EBC85 for ; Sat, 19 Aug 2006 00:29:24 +0200 (CEST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by nez-perce.inria.fr (8.13.6/8.13.6) with ESMTP id k7IMTFTe015488 for ; Sat, 19 Aug 2006 00:29:23 +0200 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id AAA15674 for ; Sat, 19 Aug 2006 00:25:19 +0200 (MET DST) Received: from ciao.gmane.org (main.gmane.org [80.91.229.2]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id k7IMPIO3027292 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO) for ; Sat, 19 Aug 2006 00:25:18 +0200 Received: from list by ciao.gmane.org with local (Exim 4.43) id 1GEClo-000527-O8 for caml-list@inria.fr; Sat, 19 Aug 2006 00:24:53 +0200 Received: from 0x5731d08c.bynxx18.adsl-dhcp.tele.dk ([87.49.208.140]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 19 Aug 2006 00:24:52 +0200 Received: from spam by 0x5731d08c.bynxx18.adsl-dhcp.tele.dk with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 19 Aug 2006 00:24:52 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: caml-list@inria.fr From: Bardur Arantsson Subject: Re: Help interfacing with C Date: Sat, 19 Aug 2006 00:24:40 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: 0x5731d08c.bynxx18.adsl-dhcp.tele.dk User-Agent: Thunderbird 1.5.0.5 (X11/20060729) In-Reply-To: Sender: news X-Miltered: at concorde with ID 44E63E4E.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; interfacing:01 descriptors:01 ocaml:01 buffer:01 ocaml:01 pairs:01 iter:01 unix:01 descriptors:01 hashtable:01 unix:01 cheers:01 wrote:01 wrote:01 imho:01 X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.0.3 Nathaniel Gray wrote: > On 8/16/06, Bardur Arantsson wrote: >> Nathaniel Gray wrote: >> > Hi folks, >> [--snip--] > > Thanks, but this doesn't really help. Perhaps I should say what I'm > trying to accomplish instead of trying to let the types speak for me. > The point is that when you select on a list of file descriptors > there's a very good chance that you don't *only* care that file > descriptor f is ready, you also have some ocaml data structure > associated with f that you want to use with it in some way. For > example, you probably have a string to write or a buffer to read into. > > The current API is sort of a minimal translation of the select system > call to OCaml, which is a good starting point, but not great IMHO. In > order to match up each file descriptor to its data you have to scan > the output fd list yet again, after it's already been done once at the > C level, and since you don't know how/if it's sorted you end up with > unsatisfying time complexity for the whole thing. It's not critical, > since the lists are small, but it hardly brings a smile to your face. > > On the other hand, imagine a select2 that takes lists of (fd, 'a) > pairs and returns the same. The results become incredibly easy to > handle, with no scanning necessary. You probably just List.iter a > simple read/write function over the result and you're done. > Have you tried to benchmark the naive implementation(*) versus a "bare" Unix.select? I shouldn't think you a little bit extra of scanning the list which is O(n) in the number of _active_ file descriptors matters with all the O(MAX_FD) stuff that's going on in select(). I would expect most of the time to be spent doing the actual system call. (*) That is, an implementation which puts (fd, associated value) in a hashtable indexed by the file_descr and does the scanning after doing the Unix.select. Cheers, -- Bardur Arantsson - This is supposed to be a happy occasion. Let's not *bicker* and *argue* about who killed who. 'Monty Python and the Holy Grail'