2013-02-20 18 views
59

Làm việc trên ứng dụng dựa trên Android và iOS yêu cầu liên lạc với máy chủ đang chạy trong cùng một thiết bị. Hiện đang sử dụng kết nối TCP loopback để giao tiếp với ứng dụng và máy chủ (Ứng dụng được viết bằng lớp người dùng, máy chủ được viết bằng C++ bằng cách sử dụng Android NDK)Hiệu suất: Kết nối vòng lặp TCP và Ổ cắm miền Unix

Tôi đã tự hỏi nếu thay thế liên lạc nội bộ với ổ cắm miền Unix sẽ cải thiện hiệu suất?

Hoặc nói chung là có bất kỳ bằng chứng/lý thuyết nào chứng minh rằng ổ cắm miền Unix sẽ mang lại hiệu suất tốt hơn sau đó kết nối TCP loopback?

+1

Hãy nhớ rằng ổ cắm cục bộ (ổ cắm miền UNIX) cần một tệp trong hệ thống tệp. Sử dụng địa chỉ loopback TCP giữ tất cả trong bộ nhớ. Và nếu bạn phải sử dụng các cổng TCP từ xa, có thể dễ dàng tích hợp một ổ cắm TCP khác thay vì không sử dụng ổ cắm mới và gia đình địa chỉ. –

+0

tôi vừa tìm thấy một liên kết http://bhavin.directi.com/unix-domain-sockets-vs-tcp-sockets/ – RDX

+0

@JoachimPileborg Khi chỉ phát triển cho Linux (Android), có tùy chọn để sử dụng các trình cắm thêm miền _abstract_ UNIX , không cần tệp trong hệ thống tệp. – thuovila

Trả lời

61

Có, thông tin liên lạc nội bộ của các ổ cắm miền unix phải nhanh hơn kết nối bằng kết nối cục bộ loopback vì bạn có ít chi phí TCP hơn, xem herehere.

+10

liên kết đầu tiên trích dẫn liên kết thứ hai, là từ năm 2005 (cũ). và nó chỉ bao gồm FreeBSD –

+3

Câu trả lời này là sai, khi thử nghiệm loopback tcp trên linux hiện đại là nhanh và đôi khi nhanh hơn UDS. có thể cung cấp điểm chuẩn nếu được yêu cầu – easytiger

+45

Tôi yêu cầu bạn cung cấp điểm chuẩn. – ggPeti

5

Ổ cắm miền Unix thường nhanh gấp hai lần ổ cắm TCP khi cả hai máy ngang hàng trên cùng một máy chủ. Giao thức miền Unix không phải là một bộ giao thức thực tế, mà là cách thực hiện truyền thông máy khách/máy chủ trên một máy chủ duy nhất sử dụng cùng một API được sử dụng cho máy khách và máy chủ trên các máy chủ khác nhau. Các giao thức miền Unix là một phương thức thay thế cho các phương thức truyền thông liên bộ (IPC).

19

Redis benchmark hiển thị ổ cắm miền unix có thể nhanh hơn đáng kể so với vòng lặp TCP.

Khi máy chủ và chương trình điểm chuẩn khách hàng chạy trên cùng một hộp, cả vòng lặp TCP/IP và ổ cắm miền unix đều có thể được sử dụng. Tùy thuộc vào nền tảng, các ổ cắm miền unix có thể đạt được thông lượng nhiều hơn khoảng 50% so với vòng lặp TCP/IP (trên Linux chẳng hạn). Hành vi mặc định của redis-benchmark là sử dụng vòng lặp TCP/IP.

Tuy nhiên, sự khác biệt này chỉ quan trọng khi thông lượng cao.

Throughput per data size

29

benchmark này: https://github.com/rigtorp/ipc-bench cung cấp độ trễ và kiểm tra thông cho TCP socket, Unix Sockets miền (UDS), và ống dẫn.

Here you have the results on a single CPU 3.3GHz Linux machine : 

TCP average latency: 6 us 

UDS average latency: 2 us 

PIPE average latency: 2 us 

TCP average throughput: 253702 msg/s 

UDS average throughput: 1733874 msg/s 

PIPE average throughput: 1682796 msg/s 

66% độ trễ giảm và gần như 7X thông hơn giải thích lý do tại sao hầu hết các phần mềm hiệu suất quan trọng có giao thức tùy chỉnh IPC riêng của họ.

+23

Tôi nhận thấy bạn có rất nhiều câu trả lời đề xuất những gì có vẻ là sản phẩm của bạn. Vui lòng đọc [trang trung tâm trợ giúp này] (http://stackoverflow.com/help/behavior), đáng chú ý: *> Đăng câu trả lời phù hợp, và nếu một số (nhưng không phải tất cả) xảy ra về sản phẩm hoặc trang web của bạn, đó là đuợc. Tuy nhiên, bạn ** phải ** tiết lộ liên kết của bạn trong câu trả lời của bạn. Nếu một tỷ lệ lớn các bài đăng của bạn bao gồm đề cập đến sản phẩm hoặc trang web của bạn, có thể bạn đang ở đây vì lý do sai. * – Bob

+5

Âm thanh với tôi như sản phẩm của họ là câu trả lời cho vấn đề! Có lẽ đó là lý do tại sao họ trả lời những câu hỏi đó; bởi vì họ biết câu trả lời. – GreenReaper

+0

Đây là một câu trả lời tuyệt vời vì nó có một số số. Thông lượng từ TCP đến UNIX là tốt hơn 350%, UNIX đến PIPE 40% trên i5. –