readline

C#队列学习笔记:RabbitMQ优先级队列

↘锁芯ラ 提交于 2020-04-12 08:59:14
原文: C#队列学习笔记:RabbitMQ优先级队列 一、引言 在具体业务中可能会遇到一些要提前处理的消息,比如普通客户的消息按先进先出的顺序处理,Vip客户的消息要提前处理。在RabbitMQ中,消息优先级的实现方式是:在声明queue时设置队列的x-max-priority属性,然后在publish消息时,设置消息的优先级即可。 RabbitMQ优先级队列注意事项: 1)RabbitMQ3.5以后才支持优先级队列。 2)只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效。 3)优先级取值范围在0~9之间,数值越大则优先级越高。 二、示例 2.1、发送端(生产端) 新建一个控制台项目Send,并添加一个类RabbitMQConfig。 class RabbitMQConfig { public static string Host { get ; set ; } public static string VirtualHost { get ; set ; } public static string UserName { get ; set ; } public static string Password { get ; set ; } public static int Port { get ; set ; } static RabbitMQConfig() {

多线程之旅(Task 任务)

别等时光非礼了梦想. 提交于 2020-04-12 07:31:43
一、Task(任务)和ThreadPool(线程池)不同 源码   1、线程(Thread)是创建并发工具的底层类,但是在前几篇文章中我们介绍了Thread的特点,和实例。可以很明显发现局限性(返回值不好获取(必须在一个作用域中)),当我们线程执行完之后不能很好的进行下一次任务的执行,需要多次销毁和创建,所以不是很容易使用在多并发的情况下。   2、线程池(ThreadPool) QueueUserWorkItem是很容易发起并发任务,也解决了上面我们的需要多次创建、销毁的性能损耗解决了,但是我们就是太简单的,我不知道线程什么时候结束,也没有获取返回值的途径,也是比较尴尬的事情。   3、任务(Task)表示一个通过或不通过线程实现的并发操作, 任务 是可组合的,使用 延续(continuation) 可将它们串联在一起,它们可以使用线程池减少启动延迟,可使用回调方法避免多个线程同时等待I/O密集操作。 二、初识Task(任务)   1、Task(任务)是在.NET 4.0引入的、Task是在我们线程池ThreadPool上面进行进一步的优化,所以Task默认还是线程池线程,并且是后台线程,当我们的主线程结束时其他线程也会结束   2、Task创建任务,也和之前差不多 /// <summary> /// Task 的使用 /// Task 的创建还是差不多的 /// <

C#中的异步编程:await和async

烂漫一生 提交于 2020-04-10 09:07:31
根据代码示例来学习, 创建一个函数来模拟时间消耗的方法,此处为 GetSomeThing 函数。 要使用异步编程,需要使用一个async修饰的方法来包装调用 GetSomeThing 函数,此函数的返回值为Task类型,该类型表示进行并行运算的任务引用。此处示例为 ConsumeManyTime 函数。 现在就可以直接使用异步方式了,参考 TestOne() 函数中的代码,其实就是直接调用第二步中的函数 ConsumeManyTime() ; 总结: 异步编程虽然示例三步,但是实际上就是两步的事情,第一步是模拟应用,跟异步编程本身没有关系,第二步包装一个Task返回类型的 async 修饰的方法,该方法实际调用应用函数,第三步调用第二步的方法,从而执行对模拟应用的异步执行。 附加: 除了异步编程以外,C#还提供了并发编程相关功能,极大简化了并发任务的开发,可以让开发人员无需创建线程池以及管理线程这些工作,就可以直接使用并发开发带来的优势。 示例代码见 Testpallral() 。 代码如下 class Program { static int i = 0; //模拟耗时的运算或者IO public static bool GetSomeThing(string a) { Thread.Sleep((new Random()).Next()%10*1000); i++;

100+并发报错 java.net.BindException: Address already in use

℡╲_俬逩灬. 提交于 2020-04-09 17:02:44
直接上代码,注意红色部分就是解决问题的方法,很多人都会忽视这个细节 public class HttpClient { public static String doGet(String httpurl) { HttpURLConnection connection = null; InputStream is = null; BufferedReader br = null; String result = null;// 返回结果字符串 try { URL url = new URL(httpurl); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); // close_wait状态的连接,而且这些连接都不会关闭,最后导致服务器没法建立新的网络连接,从而停止响应 connection.setRequestProperty("Connection", "close"); connection.setConnectTimeout(60000); connection.setReadTimeout(60000); connection.connect(); if (connection.getResponseCode() == 200) { is =

C#如何调用C++(进阶篇)

旧城冷巷雨未停 提交于 2020-04-08 22:07:57
上一篇文章最后,提出的一个问题:如果一个c++库中有很多方法,需要一个个声明??这样岂不是要写很多代码??,而且没有智能提示看到提供了那些方法。 如下图: 如果有朋友需要用这种方式调用,而又不知道怎么使用,请看我的上一篇文章: https://www.cnblogs.com/skyfreedom/p/11773597.html 针对上述问题,在使用过程中总结,记录下来,供需要的朋友参考。 重点:通过CLI实现c#调用c++ 看完了本文,相信你就会了,一步步操作就是了。 一、 新建一个netcore控制台应用程序; 这个是我们测试调用C++用的 二、 创建一个c++空项目 如图: 项目创建完成,我们添加一个类,写几个方法,这儿就简单写一个计算器的加减乘除吧! 在CaculateData.h中添加如下代码,定义几个函数声明; #include <stdio.h> #include <stdlib.h> #include <iostream> #ifdef CaculateDLL_EXPORTS #define Calculate_EXPORTS __declspec(dllexport) #else #define Calculate_EXPORTS __declspec(dllimport) #endif extern " C " Calculate_EXPORTS int Add(

OpenGL ES 3. OBJ文件渲染

丶灬走出姿态 提交于 2020-04-08 16:50:36
大家好,接下来将为大家介绍OpenGL ES 3. OBJ文件渲染。 上一节介绍了OBJ文件及其文本结构方面的内容,接下来将会介绍如何将OBJ文件加载到内存,并通过OpenGL的方式渲染出来。 1、OBJ文件解析类 由于OBJ文本文件是按照一定的规则储存的(详见上一节内容介绍),所以,我们首先介绍OBJ文件的加载解析,加载后用于渲染物体的 LoadedObjectVertexNormalTexture 类。介绍加载顶点坐标、三角形面、纹理坐标等信息。 import android.opengl.GLES30; //加载后的物体——仅携带顶点信息,颜色随机 public class LoadedObjectVertexNormalTexture { int mProgram;//自定义渲染管线着色器程序id int muMVPMatrixHandle;//总变换矩阵引用 int muMMatrixHandle;//位置、旋转变换矩阵 int maPositionHandle; //顶点位置属性引用 int maNormalHandle; //顶点法向量属性引用 int maLightLocationHandle;//光源位置属性引用 int maCameraHandle; //摄像机位置属性引用 int maTexCoorHandle; //顶点纹理坐标属性引用 String

162.Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

心不动则不痛 提交于 2020-04-07 16:44:03
1.效果 调用 阿里云 的接口 去 定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title : invokingUrl * @Description: * @return void * @throws Exception * @throws @date 2018年7月22日 下午11:58:58 */ @RequestMapping("/invokingUrl.action") public void invokingUrl(HttpServletRequest request) throws Exception{ //------------------------java中发送请求---------------开始------------ //记录登录着的id信息 //(1)拿到用户的ip String remoteAddr = request.getRemoteAddr(); //(2) 通过淘宝IP地址库获取IP位置 // 动态调用数据库数据 PrintWriter out = null; BufferedReader in =null; String getData =""; String line; URL url =

用 C 语言开发一门编程语言 — 跨平台

邮差的信 提交于 2020-04-07 13:36:51
目录 文章目录 目录 前文列表 实现跨平台的可移植性 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 实现跨平台的可移植性 使用预处理器来解决程序跨平台的可移植性(Portability)问题。 预处理器(CPP)也是一个程序,它在真正编译程序之前运行,所以称之为预处理或预编译器。预处理器的应用场景之一就是检测当前的代码在哪个操作系统中运行,从而来产生与平台相关的代码。而这也正是我们做可移植性工作时所需要的。 这里使用预处理器指令来判断,如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数;而在其他操作系统上运行则直接使用 readline 函数库提供的函数。 # include <stdio.h> # include <stdlib.h> /* * 如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数。 */ # ifdef _WIN32 # include <string.h> static char buffer [ 2048 ] ; char * readline ( char * prompt ) { fputs ( prompt , stdout ) ; fgets ( buffer , 2048 , stdin ) ; char * cpy =

用 C 语言开发一门编程语言 — 跨平台

守給你的承諾、 提交于 2020-04-07 10:15:31
目录 文章目录 目录 前文列表 实现跨平台的可移植性 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 实现跨平台的可移植性 使用预处理器来解决程序跨平台的可移植性(Portability)问题。 预处理器(CPP)也是一个程序,它在真正编译程序之前运行,所以称之为预处理或预编译器。预处理器的应用场景之一就是检测当前的代码在哪个操作系统中运行,从而来产生与平台相关的代码。而这也正是我们做可移植性工作时所需要的。 这里使用预处理器指令来判断,如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数;而在其他操作系统上运行则直接使用 readline 函数库提供的函数。 # include <stdio.h> # include <stdlib.h> /* * 如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数。 */ # ifdef _WIN32 # include <string.h> static char buffer [ 2048 ] ; char * readline ( char * prompt ) { fputs ( prompt , stdout ) ; fgets ( buffer , 2048 , stdin ) ; char * cpy =

python知识整理(读写文件)_4

核能气质少年 提交于 2020-04-06 19:55:42
!#/usr/bin/python env # - - conding - - awk -F ':' '/OO/' password awk -F ':' '$1~/root/' password 读写文件: 1、新建一个文件,并写入内容,文件不存在会自动创建。 test = 'This is my first file\n Thsi is line' file=oepn('2.txt','w') //w 如果文件不存自动创建。 file.write(test) file.close() file.read() 查看这个文件: 如何给文件增加内容: file_append='\n this is file append' file=open('2.txt','a') file.write(test) file.close() 掌握append的用法: file=open('2.txt','a') 打开类型为 a a 则表示 append 3、读取文件内容: file=open('2.txt','r') content=file.read() print(content) 按行读取: 如果想在文档中一行一行的读取,比如excel文件: 读取的内容和你使用的次数有关,如 使用第二次的时候,读取的就是文本你的第二行: 存取到了一个 python list 里面: file = open(