Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove num_cpus dependency #488

Merged
merged 1 commit into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ jobs:
run: sudo ifconfig lo0 alias 127.0.0.3

- uses: actions/checkout@v3

- name: Free Disk Space
if: matrix.target.os == 'ubuntu-latest'
run: ./scripts/free-disk-space.sh

- name: Install OpenSSL
if: matrix.target.os == 'windows-latest'
Expand Down
88 changes: 44 additions & 44 deletions actix-server/CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Changes

## Unreleased - 2023-xx-xx
## Unreleased

- Add support for MultiPath TCP (MPTCP) with `MpTcp` enum and `ServerBuilder::mptcp()` method.
- Minimum supported Rust version (MSRV) is now 1.65.

## 2.2.0 - 2022-12-21
## 2.2.0

- Minimum supported Rust version (MSRV) is now 1.59.
- Update `tokio-uring` dependency to `0.4`. [#473]

[#473]: https://github.com/actix/actix-net/pull/473

## 2.1.1 - 2022-03-09
## 2.1.1

- No significant changes since `2.1.0`.

## 2.1.0 - 2022-03-08
## 2.1.0

- Update `tokio-uring` dependency to `0.3`. [#448]
- Logs emitted now use the `tracing` crate with `log` compatibility. [#448]
Expand All @@ -25,47 +25,47 @@
[#443]: https://github.com/actix/actix-net/pull/443
[#448]: https://github.com/actix/actix-net/pull/448

## 2.0.0 - 2022-01-19
## 2.0.0

- No significant changes since `2.0.0-rc.4`.

## 2.0.0-rc.4 - 2022-01-12
## 2.0.0-rc.4

- Update `tokio-uring` dependency to `0.2`. [#436]

[#436]: https://github.com/actix/actix-net/pull/436

## 2.0.0-rc.3 - 2021-12-31
## 2.0.0-rc.3

- No significant changes since `2.0.0-rc.2`.

## 2.0.0-rc.2 - 2021-12-27
## 2.0.0-rc.2

- Simplify `TestServer`. [#431]

[#431]: https://github.com/actix/actix-net/pull/431

## 2.0.0-rc.1 - 2021-12-05
## 2.0.0-rc.1

- Hide implementation details of `Server`. [#424]
- `Server` now runs only after awaiting it. [#425]

[#424]: https://github.com/actix/actix-net/pull/424
[#425]: https://github.com/actix/actix-net/pull/425

## 2.0.0-beta.9 - 2021-11-15
## 2.0.0-beta.9

- Restore `Arbiter` support lost in `beta.8`. [#417]

[#417]: https://github.com/actix/actix-net/pull/417

## 2.0.0-beta.8 - 2021-11-05 _(YANKED)_
## 2.0.0-beta.8

- Fix non-unix signal handler. [#410]

[#410]: https://github.com/actix/actix-net/pull/410

## 2.0.0-beta.7 - 2021-11-05 _(YANKED)_
## 2.0.0-beta.7

- Server can be started in regular Tokio runtime. [#408]
- Expose new `Server` type whose `Future` impl resolves when server stops. [#408]
Expand All @@ -78,7 +78,7 @@
[#407]: https://github.com/actix/actix-net/pull/407
[#408]: https://github.com/actix/actix-net/pull/408

## 2.0.0-beta.6 - 2021-10-11
## 2.0.0-beta.6

- Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374]
- Server no long listens to `SIGHUP` signal. Previously, the received was not used but did block subsequent exit signals from working. [#389]
Expand All @@ -89,19 +89,19 @@
[#349]: https://github.com/actix/actix-net/pull/349
[#389]: https://github.com/actix/actix-net/pull/389

## 2.0.0-beta.5 - 2021-04-20
## 2.0.0-beta.5

- Server shutdown notifies all workers to exit regardless if shutdown is graceful. This causes all workers to shutdown immediately in force shutdown case. [#333]

[#333]: https://github.com/actix/actix-net/pull/333

## 2.0.0-beta.4 - 2021-04-01
## 2.0.0-beta.4

- Prevent panic when `shutdown_timeout` is very large. [f9262db]

[f9262db]: https://github.com/actix/actix-net/commit/f9262db

## 2.0.0-beta.3 - 2021-02-06
## 2.0.0-beta.3

- Hidden `ServerBuilder::start` method has been removed. Use `ServerBuilder::run`. [#246]
- Add retry for EINTR signal (`io::Interrupted`) in `Accept`'s poll loop. [#264]
Expand All @@ -113,13 +113,13 @@
[#265]: https://github.com/actix/actix-net/pull/265
[#273]: https://github.com/actix/actix-net/pull/273

## 2.0.0-beta.2 - 2021-01-03
## 2.0.0-beta.2

- Merge `actix-testing` to `actix-server` as `test_server` mod. [#242]

[#242]: https://github.com/actix/actix-net/pull/242

## 2.0.0-beta.1 - 2020-12-28
## 2.0.0-beta.1

- Added explicit info log message on accept queue pause. [#215]
- Prevent double registration of sockets when back-pressure is resolved. [#223]
Expand All @@ -134,127 +134,127 @@
[#223]: https://github.com/actix/actix-net/pull/223
[#239]: https://github.com/actix/actix-net/pull/239

## 1.0.4 - 2020-09-12
## 1.0.4

- Update actix-codec to 0.3.0.
- Workers must be greater than 0. [#167]

[#167]: https://github.com/actix/actix-net/pull/167

## 1.0.3 - 2020-05-19
## 1.0.3

- Replace deprecated `net2` crate with `socket2` [#140]

[#140]: https://github.com/actix/actix-net/pull/140

## 1.0.2 - 2020-02-26
## 1.0.2

- Avoid error by calling `reregister()` on Windows [#103]

[#103]: https://github.com/actix/actix-net/pull/103

## 1.0.1 - 2019-12-29
## 1.0.1

- Rename `.start()` method to `.run()`

## 1.0.0 - 2019-12-11
## 1.0.0

- Use actix-net releases

## 1.0.0-alpha.4 - 2019-12-08
## 1.0.0-alpha.4

- Use actix-service 1.0.0-alpha.4

## 1.0.0-alpha.3 - 2019-12-07
## 1.0.0-alpha.3

- Migrate to tokio 0.2
- Fix compilation on non-unix platforms
- Better handling server configuration

## 1.0.0-alpha.2 - 2019-12-02
## 1.0.0-alpha.2

- Simplify server service (remove actix-server-config)
- Allow to wait on `Server` until server stops

## 0.8.0-alpha.1 - 2019-11-22
## 0.8.0-alpha.1

- Migrate to `std::future`

## 0.7.0 - 2019-10-04
## 0.7.0

- Update `rustls` to 0.16
- Minimum required Rust version upped to 1.37.0

## 0.6.1 - 2019-09-25
## 0.6.1

- Add UDS listening support to `ServerBuilder`

## 0.6.0 - 2019-07-18
## 0.6.0

- Support Unix domain sockets #3

## 0.5.1 - 2019-05-18
## 0.5.1

- ServerBuilder::shutdown_timeout() accepts u64

## 0.5.0 - 2019-05-12
## 0.5.0

- Add `Debug` impl for `SslError`
- Derive debug for `Server` and `ServerCommand`
- Upgrade to actix-service 0.4

## 0.4.3 - 2019-04-16
## 0.4.3

- Re-export `IoStream` trait
- Depend on `ssl` and `rust-tls` features from actix-server-config

## 0.4.2 - 2019-03-30
## 0.4.2

- Fix SIGINT force shutdown

## 0.4.1 - 2019-03-14
## 0.4.1

- `SystemRuntime::on_start()` - allow to run future before server service initialization

## 0.4.0 - 2019-03-12
## 0.4.0

- Use `ServerConfig` for service factory
- Wrap tcp socket to `Io` type
- Upgrade actix-service

## 0.3.1 - 2019-03-04
## 0.3.1

- Add `ServerBuilder::maxconnrate` sets the maximum per-worker number of concurrent connections
- Add helper ssl error `SslError`
- Rename `StreamServiceFactory` to `ServiceFactory`
- Deprecate `StreamServiceFactory`

## 0.3.0 - 2019-03-02
## 0.3.0

- Use new `NewService` trait

## 0.2.1 - 2019-02-09
## 0.2.1

- Drop service response

## 0.2.0 - 2019-02-01
## 0.2.0

- Migrate to actix-service 0.2
- Updated rustls dependency

## 0.1.3 - 2018-12-21
## 0.1.3

- Fix max concurrent connections handling

## 0.1.2 - 2018-12-12
## 0.1.2

- rename ServiceConfig::rt() to ServiceConfig::apply()
- Fix back-pressure for concurrent ssl handshakes

## 0.1.1 - 2018-12-11
## 0.1.1

- Fix signal handling on windows

## 0.1.0 - 2018-12-09
## 0.1.0

- Move server to separate crate
1 change: 0 additions & 1 deletion actix-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ actix-utils = "3"
futures-core = { version = "0.3.17", default-features = false, features = ["alloc"] }
futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] }
mio = { version = "0.8", features = ["os-poll", "net"] }
num_cpus = "1.13"
socket2 = "0.5"
tokio = { version = "1.23.1", features = ["sync"] }
tracing = { version = "0.1.30", default-features = false, features = ["log"] }
Expand Down
10 changes: 8 additions & 2 deletions actix-server/src/builder.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::{io, time::Duration};
use std::{io, num::NonZeroUsize, time::Duration};

use actix_rt::net::TcpStream;
use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender};
Expand Down Expand Up @@ -55,7 +55,7 @@ impl ServerBuilder {
let (cmd_tx, cmd_rx) = unbounded_channel();

ServerBuilder {
threads: num_cpus::get_physical(),
threads: std::thread::available_parallelism().map_or(2, NonZeroUsize::get),
token: 0,
factories: Vec::new(),
sockets: Vec::new(),
Expand All @@ -76,6 +76,12 @@ impl ServerBuilder {
/// The default worker count is the number of physical CPU cores available. If your benchmark
/// testing indicates that simultaneous multi-threading is beneficial to your app, you can use
/// the [`num_cpus`] crate to acquire the _logical_ core count instead.
///
/// # Panics
///
/// Panics if `num` is 0.
///
/// [`num_cpus`]: https://docs.rs/num_cpus
pub fn workers(mut self, num: usize) -> Self {
assert_ne!(num, 0, "workers must be greater than 0");
self.threads = num;
Expand Down
8 changes: 6 additions & 2 deletions actix-server/src/worker.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::{
future::Future,
io, mem,
num::NonZeroUsize,
pin::Pin,
rc::Rc,
sync::{
Expand Down Expand Up @@ -249,8 +250,11 @@ pub(crate) struct ServerWorkerConfig {

impl Default for ServerWorkerConfig {
fn default() -> Self {
// 512 is the default max blocking thread count of tokio runtime.
let max_blocking_threads = std::cmp::max(512 / num_cpus::get_physical(), 1);
let parallelism = std::thread::available_parallelism().map_or(2, NonZeroUsize::get);

// 512 is the default max blocking thread count of a Tokio runtime.
let max_blocking_threads = std::cmp::max(512 / parallelism, 1);

Self {
shutdown_timeout: Duration::from_secs(30),
max_blocking_threads,
Expand Down
Loading
Loading