由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 本版从来没有过小学算术解决不了的问题!
... ?
相关主题
如何下载网络页面,不包含,
说说我以前做的ultra low latency架构吧
parsing file in node: js or python ?一个C++的概念问题
question about "popen" in C/C++How to read binary(data) file generated by Fortran in C/C++ (转载)
C++ Q13: Input多线程编程前景如何?
请教一个C++的问题求教Code
应该请dsb之类学物理的来说说how to count the times a function is used
这个go的吐槽很客观c++ 中如何把str转换为float?
深入说说Nesthelp on string parse
相关话题的讨论汇总
话题: csv话题: ssd话题: cpu话题: windows话题: 单线程
进入Programming版参与讨论
1 (共1页)
T********i
发帖数: 2416
1
牵狗搜C++ csv parser。
第一第二都是github。
https://github.com/ben-strasser/fast-cpp-csv-parser
https://github.com/vincentlaucsb/csv-parser
我相信robustness都没问题。而且各种fancy corner case都帮你搞定了。
第二个连benchmark都给你了69.9 MB in 0.33 seconds.
也就是10G大约47s。1.80GHz i7 + Toshiba XG5 SSD。
讨论:这个应该主要是I/O bound。Toshiba XG5 SSD peak sequential read可以达到2
/3GB/s。
如果你用机械HD,估计也就80-100MB/s那个样子。
另外,这个是sequential read,性能和文件大小关系不大。当然,如果是小文件,第
一遍benchmark会比第二次慢很多,因此第二次cache文件到RAM里面了。
不论如何,用上面任何一个库。你一行代码都不写,benchmark一下,应该1分钟左右完
成。AGAIN,记住SSD和mechnical HD不一样!
我不明白这么简单的事情,为什么能扯好几天的蛋?
T********i
发帖数: 2416
2
另外,澄清一下误解。
DISK I/O,不论什么介质,SSD或者机械的。都是单线程sequential最快。
你开几十个线程,并行读,肯定更慢。
尤其是机械的。乱seek,并行慢10倍都很容易。
如果你读完了CPU in memory处理很费事,可以考虑一个I/O thread分批读,发送多个
thread处理。这种情况,total threads == CPU cores是最优的。如果你CPU只有4
cores,每个2 hyper thread,那么total == 8 threads。多了的话,没用!
g****t
发帖数: 31659
3
他问的是单线程嘛。单线程的库不好找。io用fread读一块,用庫parse一下,再读再
parse就好。另外csv很trick的,就算用开源库(你找的第二个不错,visual studio也
可以用),我肯定要检查Windows 文件,unix
文件EOF EOL之类的东西的。


: 另外,澄清一下误解。

: DISK I/O,不论什么介质,SSD或者机械的。都是单线程sequential最快。

: 你开几十个线程,并行读,肯定更慢。

: 尤其是机械的。乱seek,并行慢10倍都很容易。

: 如果你读完了CPU in memory处理很费事,可以考虑一个I/O thread分批
读,发
送多个

: thread处理。这种情况,total threads == CPU cores是最优的。如果你
CPU只
有4

: cores,每个2 hyper thread,那么total == 8 threads。多了的话,没
用!



【在 T********i 的大作中提到】
: 另外,澄清一下误解。
: DISK I/O,不论什么介质,SSD或者机械的。都是单线程sequential最快。
: 你开几十个线程,并行读,肯定更慢。
: 尤其是机械的。乱seek,并行慢10倍都很容易。
: 如果你读完了CPU in memory处理很费事,可以考虑一个I/O thread分批读,发送多个
: thread处理。这种情况,total threads == CPU cores是最优的。如果你CPU只有4
: cores,每个2 hyper thread,那么total == 8 threads。多了的话,没用!

n******t
发帖数: 4406
4
說實話啊,我覺得用了這個也沒用。csv這種東西parse完了是要拿去幹別的事情的,你
覺得這麼一件事情搞不明白的,下面的事情能搞明白?

到2

【在 T********i 的大作中提到】
: 牵狗搜C++ csv parser。
: 第一第二都是github。
: https://github.com/ben-strasser/fast-cpp-csv-parser
: https://github.com/vincentlaucsb/csv-parser
: 我相信robustness都没问题。而且各种fancy corner case都帮你搞定了。
: 第二个连benchmark都给你了69.9 MB in 0.33 seconds.
: 也就是10G大约47s。1.80GHz i7 + Toshiba XG5 SSD。
: 讨论:这个应该主要是I/O bound。Toshiba XG5 SSD peak sequential read可以达到2
: /3GB/s。
: 如果你用机械HD,估计也就80-100MB/s那个样子。

g****t
发帖数: 31659
5
刷题再多,也对写个能用的Windows notepad无帮助。


: 說實話啊,我覺得用了這個也沒用。csv這種東西parse完了是要拿去幹別
的事情
的,你

: 覺得這麼一件事情搞不明白的,下面的事情能搞明白?

: 到2



【在 n******t 的大作中提到】
: 說實話啊,我覺得用了這個也沒用。csv這種東西parse完了是要拿去幹別的事情的,你
: 覺得這麼一件事情搞不明白的,下面的事情能搞明白?
:
: 到2

T********i
发帖数: 2416
6
老顾动不动就神秘化。什么EOF EOL之类。
就是Windows和DOS换行用CR+LF,C语言里面是\r\n
MAC OSX和Unix用LF,单个\n。
这些,对CSV没影响,把\r直接滤掉就好。
还有一个老顾没提,估计是不知道呵呵,那就是如果文件是Unicode,比如里面有中文
,在Window里面,文件前三个字节硬塞了EF BB BF三个字符。
这些,我假定都不是大问题。人家连整个RFC就实现了,这些应该都能搞定。否则早有
人报issue了,基本轮不到我们。退一万步讲,即使真的没搞定,改代码也就是几分钟
的事情。
至于单线程多线程,用户call API,单线程等一分钟返回,那就是单线程。里面咋实现
的管你啥事?再说了,第一个编译可以强制单线程。
g*******u
发帖数: 3948
7
不把简单问题复杂化,老顾就不能多打字了

到2

【在 T********i 的大作中提到】
: 牵狗搜C++ csv parser。
: 第一第二都是github。
: https://github.com/ben-strasser/fast-cpp-csv-parser
: https://github.com/vincentlaucsb/csv-parser
: 我相信robustness都没问题。而且各种fancy corner case都帮你搞定了。
: 第二个连benchmark都给你了69.9 MB in 0.33 seconds.
: 也就是10G大约47s。1.80GHz i7 + Toshiba XG5 SSD。
: 讨论:这个应该主要是I/O bound。Toshiba XG5 SSD peak sequential read可以达到2
: /3GB/s。
: 如果你用机械HD,估计也就80-100MB/s那个样子。

T********i
发帖数: 2416
8
这些问题,包括那个12306,其实解决方案都很boring,就是太简单!
I like simple!
而且都是小学数学就应该能搞定的!
做一个大项目,100%从底层做起,我就是能用别人10%的代码,去实现更多的功能!
大家都是聪明人,主要是越聪明的人,扯蛋越多,利益冲突越难把控!你看看小菊花谈
吐多高深?这世界上有他不知道的么?这样的,不用多,混进来一个,项目基本就毁了
。而且让你10辈子都找不出毛病在哪里?
T********i
发帖数: 2416
9
Windows Unicode那三个字节叫做Byte Order Mark (BOM)
EF BB BF
我检查了一下,这俩库,还真的都不能处理。
不过,修改一下也就是几分钟。
更何况,用户可能不需要呢?
大概率他的csv是别的软件生成的,根本没这个mark!
微软其实很多无事生非。不说也罢。
这也说明了我这些年一直强调的。只有代码可重用才靠谱。所谓的module可重用基本是
扯蛋!还有就是任何其他人的代码,不改基本不好用。
g****t
发帖数: 31659
10
包括你说的这个细节,好多细节我确实不知道。但我知道这个地方有风险。
所以要测试要查的。
csv是人人都能写的文本文件。windows文本文件和unix文本文件好多细节要处理。
end of line那个我记得是这样的,你查查看对不对:
有的windows软件写出来的csv,最后一行会把dash r,dash n里的dash r删掉。
所以古代录入实验数据的时候,csv文件最后一行要按个return是比较稳妥的办法。
另外excel,windows老的notepad写出来的csv也有问题要处理。那些更麻烦。
就不多说。这些东西不是我故意抬扛,有的硬件测试设备带的软件,出来的数据还就
是windows excel csv。
金融口的csv估计另有一对麻烦,我不熟悉就不说了。

【在 T********i 的大作中提到】
: 老顾动不动就神秘化。什么EOF EOL之类。
: 就是Windows和DOS换行用CR+LF,C语言里面是\r\n
: MAC OSX和Unix用LF,单个\n。
: 这些,对CSV没影响,把\r直接滤掉就好。
: 还有一个老顾没提,估计是不知道呵呵,那就是如果文件是Unicode,比如里面有中文
: ,在Window里面,文件前三个字节硬塞了EF BB BF三个字符。
: 这些,我假定都不是大问题。人家连整个RFC就实现了,这些应该都能搞定。否则早有
: 人报issue了,基本轮不到我们。退一万步讲,即使真的没搞定,改代码也就是几分钟
: 的事情。
: 至于单线程多线程,用户call API,单线程等一分钟返回,那就是单线程。里面咋实现

相关主题
这个go的吐槽很客观一个C++的概念问题
深入说说NestHow to read binary(data) file generated by Fortran in C/C++ (转载)
说说我以前做的ultra low latency架构吧多线程编程前景如何?
进入Programming版参与讨论
g****t
发帖数: 31659
11
你低估这个问题的复杂性了。
先不说csv的问题。文本文件:
https://latedev.wordpress.com/2012/12/04/all-about-eof/
这个我扫了一眼,可能还没有写全。

【在 g*******u 的大作中提到】
: 不把简单问题复杂化,老顾就不能多打字了
:
: 到2

g****t
发帖数: 31659
12
小心驶得万年船。

【在 T********i 的大作中提到】
: Windows Unicode那三个字节叫做Byte Order Mark (BOM)
: EF BB BF
: 我检查了一下,这俩库,还真的都不能处理。
: 不过,修改一下也就是几分钟。
: 更何况,用户可能不需要呢?
: 大概率他的csv是别的软件生成的,根本没这个mark!
: 微软其实很多无事生非。不说也罢。
: 这也说明了我这些年一直强调的。只有代码可重用才靠谱。所谓的module可重用基本是
: 扯蛋!还有就是任何其他人的代码,不改基本不好用。

T********i
发帖数: 2416
13
这个就是几分钟的问题。
我估计楼主就是一次性parse。要是我直接上库。
搜到的两种估计99%都能一次通过。
有问题再说。我估计最大的问题就是哪个windows的BOM。哪个需要改一下代码。也就几
行。
总之,就是3-10分钟的事儿。

【在 g****t 的大作中提到】
: 小心驶得万年船。
n******t
发帖数: 4406
14
小菊花可能會叫你用cdn,什麼東西之類的。

【在 T********i 的大作中提到】
: 这些问题,包括那个12306,其实解决方案都很boring,就是太简单!
: I like simple!
: 而且都是小学数学就应该能搞定的!
: 做一个大项目,100%从底层做起,我就是能用别人10%的代码,去实现更多的功能!
: 大家都是聪明人,主要是越聪明的人,扯蛋越多,利益冲突越难把控!你看看小菊花谈
: 吐多高深?这世界上有他不知道的么?这样的,不用多,混进来一个,项目基本就毁了
: 。而且让你10辈子都找不出毛病在哪里?

y****w
发帖数: 3747
15
这个说IO密集魏老师特指原始超慢方案吧。 不然怎么看也是CPU密集。
一是数据进来要parse 二是内核还得里外给
折腾。随便写一下 看看CPU是不是wait比例那么大。系统大块读文件的能力不要小瞧。
T********i
发帖数: 2416
16
这个我考虑也是欠周到。
SSD读速度大约500MB/s。NVME可以2-3GB/s。这个很容易验证。
但是他那个benchmark是1.8GHz笔记本电脑。
6core/12 thread台式机呢?32core/64 thread AMD threadripper呢?

【在 y****w 的大作中提到】
: 这个说IO密集魏老师特指原始超慢方案吧。 不然怎么看也是CPU密集。
: 一是数据进来要parse 二是内核还得里外给
: 折腾。随便写一下 看看CPU是不是wait比例那么大。系统大块读文件的能力不要小瞧。

1 (共1页)
进入Programming版参与讨论
... ?
相关主题
Questions about C++ Linux Command Line Parsing请教一个C++的问题
请教一个初级问题应该请dsb之类学物理的来说说
C++怎样从文件读入分数?这个go的吐槽很客观
C++多线程和硬件的关系深入说说Nest
如何下载网络页面,不包含,
说说我以前做的ultra low latency架构吧
parsing file in node: js or python ?一个C++的概念问题
question about "popen" in C/C++How to read binary(data) file generated by Fortran in C/C++ (转载)
C++ Q13: Input多线程编程前景如何?
相关话题的讨论汇总
话题: csv话题: ssd话题: cpu话题: windows话题: 单线程