Bwar / CJsonObject

Ultralightweight JSON parser in C++ based on cJSON
MIT License
648 stars 239 forks source link

线程安全的问题 #6

Closed zhanb closed 5 years ago

zhanb commented 5 years ago

cJson异常处理用的是static 全局变量,因此是非线程安全的,咱们CJsonObject有对这部分做处理吗?还是说也只支持单线程?

Bwar commented 5 years ago

本周工作太忙,周末两天都在加班,cJSON里的代码改起来会比CJsonObject耗时多些,下周末我再看看能否改掉static全局变量的使用吧

zhanb commented 5 years ago

我还有个问题,就是CJsonObject的效率不知道您有没有测试过,就是一个差不多10M的字符串,经过parse,tostring出来,大概需要2s,这个是不是太慢了。我实际应用是一个http服务,客户端用get请求查询一张图片的base64字符串,我把图片的base64字符串从数据库取出来,然后打包成json,返回给客户段,我计算把字符串打包成json的这个动作就要2s多,这个太慢了,用tcp+字节流的方式大约用200ms作用,http+json需要总共大概4s,json占了2s

Bwar commented 5 years ago

cJSON异常处理用的static const char *ep;目前还没想好怎么优化更合适,不过这个只是json解析异常才会用到,json正常情况下没有问题。即便json异常也没影响到正常的解析,只是在多线程环境下不方便定位json发生错误的具体位置,正常使用这个库还是线程安全的。

关于解析和生成性能,我没做过大json字符串的测试,只是parse和ToString的话都是直接调用cJSON的parse和cJSON_PrintUnformatted函数,CJsonObject自身并没有降低性能。如果cJSON的性能要求不能满足业务需要,就只能更换性能更好的json库了。

zhanb commented 5 years ago

好的,感谢解答