iopipe v0.0.4 - RingBuffers!
Uknown
sireeshkodali1 at gmail.com
Fri May 11 14:04:01 UTC 2018
On Friday, 11 May 2018 at 13:28:58 UTC, Steven Schveighoffer
wrote:
> [...]
> I do get the point of having to go outside the cache. I'll look
> and see if maybe specifying a 1000 line context helps ;)
>
> Update: nope, still pretty much the same.
>
I'm sure someone will find some good show off program.
>> The amount of work done per byte though has to be minimal to
>> actually see anything.
>
> Right, this is another part of the problem -- if copying is so
> rare compared to the other operations, then the difference is
> going to be lost in the noise.
>
> What I have learned here is:
>
> 1. Ring buffers are really cool (I still love how it works) and
> perform as well as normal buffers
> 2. The use cases are much smaller than I thought
> 3. In most real-world applications, they are a wash, and not
> worth the OS tricks needed to use it.
Now I need to learn all about ring-buffers. Do you have any good
starting points?
> 4. iopipe makes testing with a different kind of buffer really
> easy, which was one of my original goals. So I'm glad that
> works!
That satisfying feeling when the code works exactly the way you
wanted it to!
> I'm going to (obviously) leave them there, hoping that someone
> finds a good use case, but I can say that my extreme excitement
> at getting it to work was depressed quite a bit when I found it
> didn't really gain much in terms of performance for the use
> cases I have been doing.
I'm sure someone will find a place where its useful.
>>> However, this example *does* show the power of iopipe -- it
>>> handles all flavors of unicode with one template function, is
>>> quite straightforward (though I want to abstract the line
>>> tracking code, that stuff is really tricky to get right). Oh,
>>> and it's roughly 10x faster than grep, and a bunch faster
>>> than fgrep, at least on my machine ;) I'm tempted to add
>>> regex processing to see if it still beats grep.
>>
>> Should be mostly trivial in fact. I mean our first designs for
>> IOpipe is where I wanted regex to work with it.
>>
>> Basically - if we started a match, extend window until we get
>> it or lose it. Then release up to the next point of potential
>> start.
>
> I'm thinking it's even simpler than that. All matches are dead
> on a line break (it's how grep normally works), so you simply
> have to parse the lines and run each one via regex. What I
> don't know is how much it costs regex to startup and run on an
> individual line.
>
> One thing I could do to amortize is keep 2N lines in the
> buffer, and run the regex on a whole context's worth of lines,
> then dump them all.
iopipe is looking like a great library!
> I don't get why grep is so bad at this, since it is supposedly
> doing the matching without line boundaries. I was actually
> quite shocked when iopipe was that much faster -- even when I'm
> not asking grep to print out line numbers (so it doesn't
> actually ever really have to keep track of lines).
>
> -Steve
That reminds me of this great blog post detailing grep's
performance:
http://ridiculousfish.com/blog/posts/old-age-and-treachery.html
Also, one of the original authors of grep wrote about its
performance optimizations, for anyone interested:
https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html
More information about the Digitalmars-d-announce
mailing list