.NET Core初览

.NET Core

初览的应用场景为游戏服务器开发。所以测试在侧重点上更强于IO和密集型计算

网络IO:

NetCore:60%CPU QPS 56W

C++:31%CPU QPS 58W

C++:68%CPU QPS 124W

C#测试代码

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections;
using System.Collections.Generic;

namespace ConsoleApp2
{
    class Session
    {
        public TcpClient client = null;
        public void Go()
        {
            client.GetStream().BeginRead(bytes, pos, 32 - pos, AsyncReadCallback, this);
        }
        void AsyncReadCallback(IAsyncResult ar)
        {
            if (ar.IsCompleted)
            {
                var sess = ar.AsyncState as Session;

                sess.client.GetStream().BeginWrite(sess.bytes, sess.pos, 32, AsyncWriteCallback, sess);
            }
        }
        void AsyncWriteCallback(IAsyncResult ar)
        {
            if (ar.IsCompleted)
            {
                var sess = ar.AsyncState as Session;
                sess.client.GetStream().BeginRead(sess.bytes, sess.pos, 32, AsyncReadCallback, sess);
            }
        }
        int pos = 0;
        byte[] bytes = new byte[32];
    }
    class Program
    {
        static void worker(object obj)
        {
         while(true)
            {
                Thread.Sleep(1);

                lock(obj)
                {
                    var que = obj as Queue<Session>;
                    if(que.Count>0)
                    {
                        que.Dequeue().Go();
                    }
                }
            }
        }

        static void Main(string[] args)
        {
            var ss = new TcpListener(12125);
            ss.Start();
            var bytes = new byte[32];

            var ths = new Thread[50];
            var que = new Queue<Session>[50];

            int i = 0;
            foreach(var p in ths)
            {
                que[i] = new Queue<Session>();

                ths[i] = new Thread(   (worker));

                ths[i].Start(que[i]);
                ++i;
            }

            int balance = 0;
            while (true)
            {
                balance = ++balance %  que.Length;
                var sess = new Session();

                var task = ss.AcceptTcpClientAsync();
                while (task.IsCompleted == false)
                {
                    var cli = task.Result;
                    sess.client = cli;
                    lock (que[balance])
                    {
                        que[balance].Enqueue(sess);
                    }
                }

            }

            ss.Stop();

            Console.WriteLine("Hello World!");
        }
    }
}

TODO

来源:http://www.1994july.club/seo/

原文地址:https://www.cnblogs.com/1994jinnan/p/12038712.html

时间: 2024-10-18 10:13:54

.NET Core初览的相关文章

Hadoop源码学习笔记(3) ——初览DataNode及学习线程

Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Configured implements InterDatanodeProtocol,       ClientDatanodeProtocol, FSConstants, Runnable {      public static DataNode createDataNode(String args[],

UML初览(转)

原文:UML初览 本章使用一个简单的例子对UML中所使用的概念和视图进行初览.本章的目的是要将高层UML概念组织成一系列较小的视图和图表来可视化说明这些概念,说明如何用各种不同的概念来描述一个系统以及如何将各种视图组织在一起.概括性的说明不可能面面俱到,其中省略了许多概念.要想得到更详细的说明,可参见下一章对UML各视图的说明和本书大全部分的有关细节. 本章使用的例子是计算机管理的戏院售票系统.这是一个精心设计的例子,目的是用少量篇幅来强调说明UML的各个组件.这是一个经过有意简化的例子,忽略了

Python中函数的初览

Python中函数的初览 一.函数 1.什么是函数 为了完成某一功能的代码的集合,叫做函数,函数就是行为,就是动作 2.定义 Python中函数的定义,使用关键字def(define function 定义函数) 3.函数的调用 函数定义后,不会自动执行,需要调用者调用才会执行. 4.函数的分类 1)有无参数 2)有无返回值 例:这是一个有参数且有返回值的函数 原文地址:https://www.cnblogs.com/Mr-Liu---/p/11553210.html

UWP开发入门系列笔记之(一):UWP初览

随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说……于是顺其自然的,又开始了新一轮追随微软的脚步. 1. What Universal Windows Platform(UWP)是什么呢?首先的说一说什么叫Device Family. 微软的产品布局主要有以下这么几个方面:传统的PC和新秀平板电脑2合1(苏菲婆),手机(特洛伊木马攻陷诺基亚现在脱胎换骨成Mic

.NET Core 初体验

.NET Core 作为微软的开源项目,neter 们对之的期待还是挺大的. 以前也看过,接触过,摸索建了几个示例项目,今天就罗列下自己的初体验. .NET Core 安装.帮助等 安装的话,直接官网下载 SDK ,并安装即可.我本机安装的版本是:.NET Core 2.0.2 用的是 VS Code 作为IDE.在 这里的 终端中可以直接打命令行. 首先安装后看自己的版本:dotnet --version 查看帮助:dotnet --help 或 dotnet help 查看具体的某一个命令的

.NET Core初体验 在window上构建第一个app

1.安装.NET Core SDK 创建 .NET apps,只需要下载 .NET Core SDK for Windows,此安装器将会安装最新稳定版本的工具,并将其放在环境变量PATH里,以便我们可以在任何地方打开控制台运行dotnet. 2.初始化一些代码 下面演示一个hello world的控制台程序 打开命令提示符 切换目录到桌面cd C:\Users\yang\Desktop 输入 dotnet new console -o hwapp命令,其中  dotnet new  表示创建一

.NET Core初体验 - 在Mac下运行第一个Web示例程序

要说最近两天程序猿之间最喜欢吹水的事是什么?那绝壁是甲骨文要放弃Java!简直做梦都要笑醒!由于公司的产品线全面转向Java,最近几个月也一直在苦学Java技术.已经默默决定了,如果消息证实是真的,我马上烧掉那本最近在啃的<Spring in action>- 之前也用Xamarin Studio写一些C#的小东西,这次看到.NET Core这么如火如荼的开源着,并且可用于生产环境,我也来凑下热闹. 0. 安装Homebrew Homebrew简称"brew"是Mac下的包

系统运维-hub, repeater, switch, router初览

repeater, hub, switch, router都是针对与osi的7层网络模型的不同层而产生的设备,逐一概览如下: repeater:中继器 是网络物理层的一种连接设备,工作在osi的物理层.具有放大信号的作用,实际上是一种信号放大器.只负责将信号从一段电缆传到另一段电缆上,仅能连接同类型网段,不能连接不同类型的网络. hub:集线器 一种特殊的中继器,所以也工作在osi模型的物理层.其实质是多口的中继器. bridge:网桥 涉及到数据链路层,更确切的说应该是MAC层.作用是互联局域

.Net Core初体验

对于C#语言支持(由C#1.0-C#7.1): 编码可以使用跨平台的IDE选择,就如同VS+Resharper一样方便: 运行效果: