我有一个项目需要解析数十万个HTML和XML文档。
我认为这将是学习Ruby纤维和新Goliath框架的绝佳机会。
但显然,如果你使用阻塞库,歌利亚会陷入困境。但问题是,我不知道如何判断什么是“线程安全”(如果这甚至是歌利亚的正确术语)。
所以我的问题是,Nokogiri是否会引起Goliath或多线程/光纤的任何问题?
如果是这样,有没有比Nokogiri更安全的东西?
由于
答案 0 :(得分:5)
Goliath是一个网络框架,所以我假设你打算通过HTTP“摄取”这些文件?每个请求都被映射到ruby光纤,但实际上,服务器在单个反应器线程中运行。
所以,回答你的问题:据我所知,Nokogiri是线程安全的,但这在这里真的不重要。您需要注意的事项是:在解析文档时,CPU会被固定,而Goliath在此期间不会接受任何新请求。因此,您必须实现正确的逻辑来处理您的特定情况(例如:您可以对从套接字到达的数据块进行流解析,或者在多个巨型服务器之间进行负载平衡,或者两者兼有...... :-))