Even whether using Linux or windows is irrelevant in this case. And cpu cache is not a make or break either. What dholliday suggested is that it's the data structure you store data in that makes a big difference and I can only agree with that. In the end you want to use the the data you stream. How you store and access that data is key.
By efficient algos not meaning only data stream processing but evaluation also. My software can use lots of memory depending on configuration and has non linear memory access patterns. Compared windows "pagingfile" or linux "swap" and there is enormous difference in performance, especialy if lots of jumps to random memory locations with small blocks. Cpu cache misses are where performane is lost. For example in my case when interchanging few for loops that control memory access patterns ,there is 25%+ speed difference due to less cache misses. It means hours saved when creating or evaluating models. Also gained by using all cores on same instrument instead of dif instruments for each. Quite sure its cache misses related. Imagine 64 people going back and forth in narrow tunnel. That is cpu cores getting info from ram. If you mean dif in speed then that difference is due to less cache misses IMO.
I like the CSV (comma-separated value) format that IQFeed provides. When downloading historical data I write a line of data to a file exactly as I received it. Since each line starts with a timestamp I can easily check the data when I have questions as to why my analysis software did something unexpected. Though JSON may be appropriate for sending data to a web app it is definitely not the best format to receive and write to an easily readable file quickly (IMO). I don't know how tokenizing a CSV string compares to a JSON parser in speed, and though JSON results in many more bits over the wire, it's still minimal so if JSON is what you get you can save it as is or convert it to CSV before writing to the file. You may want to handle each tick and bid/ask change as they arrive. DTNs real-time tick feed includes bid/ask changes. Their historical tick data only includes the bid/ask with a trade. Not between trades. It would be nice if they included the complete tape as it had happened. I believe NxCore does this. Maybe check with polygon.io?
Most of the problems got solved awhile back. Cant make everything perfect ,as time is limited resource. Still cant process each tick due to limited resources, but now is have more computers and no cpu spike+ wait problem as all instruments get constantly processed 1by1 without stop, unless no incoming data. Also due to retail spread levels and time it takes to overcome spread , i see no point in tick processing. I have no special market privileges ,just retail spreads... Takes awhile to overcome those. If data gets processed once per 10-30 sec im fine. Id rather add more instruments to seek for oppertunity than evaluating fewer at higher frequency. So far i have used polygon.io for stocks and its decent, altough the forex price data is not great due to dif from my broker spreads, so i made MT4,5 script to collect forex data directly.