-
Notifications
You must be signed in to change notification settings - Fork 321
Thread Safety
Pedro Nascimento edited this page Mar 18, 2022
·
15 revisions
Warning: Check https://github.com/httprb/http/issues/558 for thread safety. As of March 2022, HTTP is not thread safe.
This gem provides no explicit mechanisms for thread-safe operation. That said, this gem actively avoids all global state, preferring to use an API built on immutable context objects which can be safely shared across threads.
Thread safety comes into play when you:
- Make an HTTP request
- Open a persistent connection with
HTTP.persistent
If you would like to open a thread-safe connection pool, we would recommend you use persistent connections and a third-party connection pool gem, such as connection_pool:
require "http"
require "connection_pool"
pool = ConnectionPool.new(size: 5, timeout: 5) do
HTTP.persistent("https://github.com")
end
# Fetch multiple paths concurrently
threads = %w(/ruby /httprb /sparklemotion).map do |path|
Thread.new do
pool.with { |conn| conn.get(path).to_s }
end
end
responses = threads.map(&:value)
(NOTE: this gem previously supported Celluloid::IO, but that support was removed to add the current timeout backend. It may be added back in a future version)