Tolong seseorang perbaiki kode saya atau sesuatu, karena saya sangat kecewa dengan Rust. Jangan tembak kurir di sini juga (jangan ragu untuk menembak saya jika itu adalah kesalahan kode buruk saya).
Saya tahu hampir setiap perbandingan performa antara Go dan Rust menunjukkan performa Rust yang lebih baik, tetapi apakah selalu demikian? Sepertinya tidak, dan sebenarnya hasil yang akan saya bagikan adalah kinerja yang sangat buruk dari Rust dan dengan semua hype saya sangat kecewa.
Hasil dari Go — berlari dengango build && ./go_test
wrk -t 25 -c 100 -d 60s --timeout 8s http://127.0.0.1:8080/test_top25
Running 1m test @ http://127.0.0.1:8080/test_top25
25 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.37s 399.13ms 4.75s 81.81%
Req/Sec 2.76 3.37 30.00 86.68%
2474 requests in 1.00m, 378.22MB read
Requests/sec: 41.18
Transfer/sec: 6.30MB
wrk -t 25 -c 100 -d 60s --timeout 8s http://127.0.0.1:8000/test_top25
Running 1m test @ http://127.0.0.1:8000/test_top25
25 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.30s 560.20ms 6.08s 76.31%
Req/Sec 2.75 3.88 30.00 84.61%
1769 requests in 1.00m, 272.14MB read
Requests/sec: 29.43
Transfer/sec: 4.53MB
Semua tes kinerja yang saya temukan adalah dengan semacam data palsu, apakah kinerja Rust dalam pengaturan aplikasi dunia nyata tidak sebagus yang dibuat semua orang? Apakah peti/perpustakaan yang digunakan? Saya tidak yakin, jadi mari kita lihat …
use actix_web::{web, App, HttpResponse, HttpServer};
use sqlx::postgres::PgPoolOptions;
use sqlx::types::JsonValue;
#[derive(sqlx::FromRow, serde::Serialize)]
struct Snapshot {
Resource: serde_json::Value
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let pool = PgPoolOptions::new()
.max_connections(25)
.min_connections(25)
.connect("<postgres_url>").await
.expect("Failed to create pool.");
HttpServer::new(move || {
App::new()
.wrap(actix_web::middleware::Compress::default())
.app_data(web::Data::new(pool.clone()))
.route("/test_top25", web::get().to(|pool: web::Data<sqlx::PgPool>| async move {
let rows = sqlx::query_as::<_, Snapshot>("SELECT <query> LIMIT 25")
.fetch_all(&**pool).await.unwrap();
HttpResponse::Ok().json(serde_json::json!({ "message": rows }))
}))
})
.client_request_timeout(std::time::Duration::from_secs(60))
.bind(("0.0.0.0", 8000))?
.run().await
}
package main
import (
"context"
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
)
func setupRouter() *gin.Engine {
r := gin.Default()
psqlInfo := "<postgres_url>"
config, err := pgxpool.ParseConfig(psqlInfo)
config.MaxConns = 25
config.MinConns = 25
pool, err := pgxpool.NewWithConfig(context.Background(), config)
r.GET("/test_top25", func(c *gin.Context) {
res, err := pool.Query(context.Background(), "SELECT <query> LIMIT 25")
rows, err := pgx.CollectRows(res, pgx.RowTo[any])
c.JSON(http.StatusOK, gin.H{
"message": rows,
})
})
return r
}
func main() {
r := setupRouter()
r.Run(":8080")
}
Seseorang cepat, perbaiki kode Rust saya, karena menurut SEMUA ORANG hal ini seharusnya tidak terjadi. Saya pikir saya cukup baik setidaknya dengan Rust, dan saya belum pernah menulis baris Go dalam hidup saya sebelumnya, jadi fakta bahwa saya bisa mendapatkan kinerja yang lebih baik dari bahasa yang baru saja saya pelajari adalah mengecewakan.
Sebagai catatan, saya memang mencoba tes ini dengan beberapa parameter berbeda; jumlah utas berbeda, jumlah koneksi berbeda, rentang waktu berbeda, dll., tetapi Rust hanya mengalahkan Go dalam satu set yang terdiri dari sekitar 15 pengujian.
Saat Anda membuat permintaan ke facebook.com, komputer Anda mencari nama domain untuk menerjemahkan nama domain tersebut menjadi alamat IP sehingga komputer Anda dapat membuat koneksi tersebut.
Bahasa kita adalah alat yang ampuh yang dapat membentuk pikiran, sikap, dan tindakan kita. Bahkan istilah yang tampaknya tidak berbahaya dapat melanggengkan bias dan stereotip yang berbahaya.
Berapa kali Anda membuang botol plastik, toples kaca, kaleng aluminium, atau paket energi hijau tanpa berpikir dua kali? Berapa kali Anda berharap bisa mendapatkan sesuatu sebagai imbalan untuk mendaur ulangnya? Jika Anda seperti kebanyakan orang, jawabannya mungkin berkali-kali. Daur ulang sering dianggap merepotkan, tugas, atau tugas yang tidak membawa manfaat langsung atau nyata.
“Hai Siri, mainkan Me Dive oleh Olivia Dean.” Saat itu Mei 2021 ketika saya memulai magang di Future Academy Africa di Akure, Nigeria.
Kita sering menemukan diri kita berjuang untuk menerapkan apa yang kita tahu baik untuk kita. Dari memberi tahu orang penting bahwa kita mencintai mereka hingga mengingat untuk berbicara seperti bajak laut, akan selalu ada orang yang mengklaim bahwa acara sehari, seminggu, atau sebulan tidak diperlukan karena mereka sudah melakukan hal-hal itu.
Di dunia yang sangat terhubung saat ini, sistem media memainkan peran penting dalam membentuk opini publik, dan akibatnya, dalam pengambilan keputusan yang demokratis. Dalam analisisnya yang mendalam tentang ekonomi politik komunikasi, cendekiawan Robert McChesney menantang kebijaksanaan konvensional dan menyajikan apa yang disebutnya sebagai “lima kebenaran” tentang media.