小编jon*_*jon的帖子

为什么非阻塞套接字连接速度如此之慢?

当我在1个线程中做100个非块套接字连接时,它非常慢(连接数逐个增加),但是如果我在100个并行线程中进行阻塞套接字连接(每个线程一个连接),那就非常快(立即完成)

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fcntl(sock, F_SETFL,O_NONBLOCK)!=0)
{
 perror("fcntl nonblock");
 return -1;
}

if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,&reuseAddr, sizeof(reuseAddr))!=0)
{
  perror("reuse addr");
  return -1;
}

sAddr.sin_addr.s_addr = inet_addr(SRV_ADDR);
sAddr.sin_port = htons(1972);

if ((n=connect(sock, (const struct sockaddr *) &sAddr, sizeof(sAddr))) < 0) 
{
  if (errno !=EINPROGRESS) {
      perror("client connect error");
      return -1;
  }     
}
else if (n>=0)
{
  printf("#%d connected\n",sock);
}

return sock;
Run Code Online (Sandbox Code Playgroud)

c sockets

9
推荐指数
1
解决办法
3945
查看次数

为什么 golang 通道在使用 8 个生产者 1 个消费者进行测试时比 intel tbb concurrent_queue 快得多

我做了一个测试来比较 golang 通道和 C++ tbb 并发队列性能,我设置了 8 个写入器和 1 个读取器,它们位于不同的线程中。结果显示 golang 比 C++ 版本快得多(无论延迟和整体发送/接收速度如何),是是真的?或者我的代码有什么错误?

golang 结果,单位是微秒

延迟最大值:1505,平均:1073 发送开始:1495593677683232,接收结束:1495593677901854,时间:218622

package main

import (
    "flag"
    "time"
    "fmt"
    "sync"
    "runtime"
)

var (
    producer = flag.Int("producer", 8, "producer")
    consumer = flag.Int("consumer", 1, "consumer")
    start_signal sync.WaitGroup
)

const (
    TEST_NUM = 1000000
)

type Item struct  {
    id int
    sendtime int64
    recvtime int64
}

var g_vec[TEST_NUM] Item

func sender(out chan int, begin int, end int) {
    start_signal.Wait()
    runtime.LockOSThread()
    println("i am in sender", begin, end) …
Run Code Online (Sandbox Code Playgroud)

c++ concurrency performance tbb go

2
推荐指数
1
解决办法
951
查看次数

标签 统计

c ×1

c++ ×1

concurrency ×1

go ×1

performance ×1

sockets ×1

tbb ×1