Thanks again. I have given numbers in my original message.

Messages are limited in size 1000 bytes. I have up to 3 instances of my 
bidirectional socket. - Audio Video and some variant of screen-sharing (similar 
in behavior to Video). 
Audio socket can receive up to 100 messages a second - each message exactly 84 
bytes.
Video (and the third) will regularly receive ~30 messages a second, each 
message up to 1000 bytes, but can momentarily rise to 100 messages a second.

This means I can roughly expect to call read:maxLength: about 60 - 200 times a 
second If I’m to abandon my ring buffer.

The other side - allocating and copying incoming messages off my ring-buffer, 
is also a little extensive. Parsing the messages is very fast and negligible 
(merely cast a C-struct over the message pointer).  I then perform some 
complicated logic over the parsed messages - but this logic cannot change 
whatever socket implementation I choose. Then I need to serially pass these 
messages serially (not concurrently) to an external media engine, that will - 
again - copy them into its own queues, and will process them in its internal 
threads. From experiments and using instruments, I learned it’s not very fast 
with taking in my messages.

This is not a high-performance situation - but my socket supports iOS and Mac, 
with devices ranging from iPhone4 and iPad2 up to the latest Mac computers. On 
iPhone-4 we suffer performance issues today, and the socket implementation is 
responsible for at least some of it. 

> On Sep 17, 2015, at 18:58, Jens Alfke <j...@mooseyard.com> wrote:
> 
> 
>> On Sep 17, 2015, at 2:24 AM, Motti Shneor <su...@bezeqint.net 
>> <mailto:su...@bezeqint.net>> wrote:
>> 
>> Is there a specific penalty to NSStream’s method read:maxLength: ? If I call 
>> it on the average 2-3 times a message, Is this far worse than reading big 
>> bulks off the stream, then doing all my book-keeping and copying and locking?
> 
> It depends on how often you’re calling it, and the relative cost of reading 
> vs parsing vs handling messages. In most use cases the kernel call overhead 
> isn’t very significant. IIRC, you haven’t given us any specific numbers, or 
> any indication that this is a super-high-performance situation.
> 
>> Last, several guys mentioned GCDAsyncSocket. What is it? an open-source 
>> thing? a system API I’m not aware of?
> 
> 
> http://lmgtfy.com/?q=GCDAsyncSocket <http://lmgtfy.com/?q=GCDAsyncSocket> ;-)
> Or alternatively, right-click on ‘GCDAsyncSocket’ and choose “Search With 
> Google” from the context menu.
> I’m not trying to be snarky, just pointing out that these days asking “what 
> is X” is usually slower than looking it up yourself.
> 
> —Jens

Motti Shneor, 
CEO,  suMac LTD.
Software Development for the Macintosh

Home/Office Address: 34 Emek-Ha-Ella St. Appt.1 Modiin, ISRAEL, 71723
Home/Office Tel/Fax: +972-8-9267730
Home eMail: motti.shn...@gmail.com 
Office eMail: su...@bezeqint.net
Mobile phone: +972-54-3136621
---
ceterum censeo microsoftiem delendam esse
---



 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list      (Macnetworkprog@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to