之前测试GM处理图片,发现CPU总是上不去(8核,但是只能到100%)。
只能逐一排查,
1. 确认OPENMP开关是否打开
2. coder库是否支持threads(jpeg和tiff暂时不支持)
这些都没有问题。
GM库bug?切换不同的图片类型,发现JPEG都可以上200%,其它支持多核的可以上到800%。
范围缩小到png库了。
更新png库到16,发现支持透明图片有问题,,,先规避,,,压测,发现还是只能到100%,只能会说png库内部问题的可能性很小了。
查看coder png代理代码,发现有个宏控制了是否加锁:SETJMP_IS_THREAD_SAFE。当前centos63和rh54都是没定义这个宏,但是测试过程中是支持不同线程的栈切换和重入的。如果屏蔽png库中使用setjmp它出异常会直接abort。异常情况很少,另外测试是线程安全的,libpng本身宣称支持多线程,因为手工增加了这个宏定义来打开处理png的多线程。