上下文

go 上下文context

你离开我真会死。 提交于 2019-11-29 10:15:54
go控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context WaitGroup这种方式是控制多个goroutine同时完成 func main() { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(2*time.Second) fmt.Println("1号完成") wg.Done() }() go func() { time.Sleep(2*time.Second) fmt.Println("2号完成") wg.Done() }() wg.Wait() fmt.Println("好了,大家都干完了,放工") } channel 通知,根据channel阻塞的原理来进行goroutine控制 func main() { stop := make(chan bool) go func() { for { select { case <-stop: fmt.Println("监控退出,停止了...") return default: fmt.Println("goroutine监控中...") time.Sleep(2 * time.Second) } } }() time.Sleep(10 * time.Second) fmt.Println("可以了,通知监控停止") stop<- true /

简单定义多线程!

≡放荡痞女 提交于 2019-11-29 09:51:43
1 说到线程,首先来说下进程,以下是进程的定义: 进程是操作系统结构的基础,是程序的一次执行,是一个程序及其数据结构在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 简单来说一个任务管理器中列表的一个exe文件就可以理解成进程,如QQ.exe就是一个进程,进程是受系统管理的基本运行单元。 1.1 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 简单来说,线程可以理解成为在进程中独立运行的子任务。比如,QQ.exe运行中就有很多的子任务在同时运行。 1.2 进程和线程的区别 1.2.1 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 。 1.2.2 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。 1.2.3 拥有资源:进程是拥有资源的一个独立单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。进程之间是不能共享地址空间的, 而线程是共享着所在进程的地址空间的。 1.2.4 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。 1.3 什么是多线程?

42、C#:EF框架的:导航属性,加载记录追踪方式(MergeOption),添加内存内容到新上下文(Attach)

北城余情 提交于 2019-11-29 08:28:01
EF很强大,知道一些用法可以很便利地开发。 1.导航属性 --- 主/子表操作 比如apply为父表(主键作为子表的外键(之一)),progress作为子表,那么apply.progress.add(new progress{ ...,....})的方式就是使用apply对象来对子表进行新增操作。这种新增操作无需添加子表的外键(也就是apply的主键),会默认添加,且与子表的主键是否是此外键无关。 注:apply为表对应的变量,并不是表本身名称,progress也是如此。 2.MergeOption --- 设置从数据库加载记录对象后对这些记录对象的追踪方式 context.windopenapplies.MergeOption = MergeOption.NoTracking是将从数据库中捞取的记录对象加载到内存后,对这些记录对象不再追踪,相当于对这些记录对象关闭了数据库,这样可以提升性能,当然,这种做法仅限于查询。如果有增删改,就不能这样,会造成context.savechange()的时候无法更新到数据库中,增删改的时候不用写这句话,直接使用默认设置MergeOption.AppendOnly即可。 注:此枚举dll:System.Data.Entity.dll 3.Attach --- 将非当前上下文内存内容加载到当前上下文中 context.windopenapplies

Django中间键与上下文处理器

ⅰ亾dé卋堺 提交于 2019-11-29 06:55:55
中间件和上下文处理器 Django 中间件( Middleware ) 是一个轻量级、底层的“插件”系统,可以介入 Django 的请求和响应处理过程,修改 Django 的输入或输出. 激活中间件 需要把它添加到 Django 配置文件中的 MIDDLEWARE_CLASSES 元组中. 自定义中间件 每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个 _init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件 process_request(request):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 process_view(request, view_func, view_args, view_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 process_template_response(request, response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象 process_response(request, response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象 process_exception(request,response

Context2019.9.4

痞子三分冷 提交于 2019-11-29 06:43:46
Context Context上下文主要用来从上文传播对象到下文中,他是可以跨线程的。 就是说 class A中你把一个OBJ对象存放到了上下文容器中, 然后你以后的所有线程或你以下调用的所有类中都可以从上下文容器中取出 上面再class A中存放的OBJ对象。 上下文即ServletContext,是一个全局的储存信息的空间,服务器启动,其就存在,服务器关闭,其才释放。 所有用户共用一个ServletContext。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。如,做一个购物类的网站,要从数据库中提取物品信息,如果用session保存这些物品信息,每个用户都访问一便数据库,效率就太低了;所以要用来Servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入Servlet上下文中,这样,每个用户只用从上下文中读入物品信息就行了。 在Servle的重写init方法中获取getServletContext()一直报java.lang.NullPointerException(空指针)异常。 我重写了init(ServletConfig)方法,但重写的init方法内部没有调用super.init(config);就是这导致了错误!父类的 init(ServletConfig

python - with管理上下文

*爱你&永不变心* 提交于 2019-11-29 06:23:33
class Fool: def __init__(self, name): self.name = name def __enter__(self): print('from enter') return self def __exit__(self, exc_type, exc_val, exc_tb): print('from exit') print(exc_type) print(exc_val) print(exc_tb) # return True with Fool('a.txt') as f: print('====>') print('sdf') # with Fool触发enter方法,将如return的值给f,操作结束后在执行exit方法,最后在打印sdf #**************************重点*********************************** # 1. with obj ---> 触发obj.__enter__(),拿到返回值 # 2. as f ---> f=返回值 # 3. with obj as f 等同于 f = obj.__enter__() # 4. 执行代码块 # 一:没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None # 二:有异常的情况下,从异常出现的位置直接触发_

Struts2中OGNL,valueStack,stackContext的学习

馋奶兔 提交于 2019-11-29 06:14:36
[/color]学习Struts2,一直不明白表单中的值是怎么传给Action的,上网查了些资料,基本了解了!下面基本是从几个人的BOLG转载过来,以后记不清了再来看~ [color=red]先看看我做的实验 jsp页面 Java代码 <s:form action= "hello/converter.action" method= "post" > <s:textfield name= "point" label= "点" ></s:textfield> <s:textfield name= "point2" label= "2" ></s:textfield> <s:textfield name= "point3" label= "3" ></s:textfield> <s:textfield name= "age" label= "年龄" ></s:textfield> <s:textfield name= "date" label= "日期" ></s:textfield> <s:submit name= "提交" ></s:submit> </s:form> 结果图(是通过<s:debug></s:debug>得到的) value stack: Stack context: 通过图中我们可以看到 valuestack中包括我传递的值(point,point2,point3

Spring 核心技术(7)

本秂侑毒 提交于 2019-11-29 06:12:22
接上篇: Spring 核心技术(6) version 5.1.8.RELEASE 1.6 定制 Bean 的特性 Spring Framework 提供了许多可用于自定义 bean 特性的接口。本节将它们分组如下: 生命周期回调 ApplicationContextAware 和 BeanNameAware 其他 Aware 接口 1.6.1 生命周期回调 要与容器的 bean 生命周期管理进行交互,可以实现 Spring InitializingBean 和 DisposableBean 接口。容器调用前者 afterPropertiesSet() 和后者的 destroy() 以便让 bean 在初始化和销毁 ​​bean 时执行某些操作。 JSR-250 @PostConstruct 和 @PreDestroy 注解通常被认为是在现代 Spring 应用程序中接收生命周期回调的最佳实践。使用这些注解意味着你的 bean 不会耦合到特定的 Spring 接口。有关详细信息,请参阅 使用 @PostConstruct 和 @PreDestroy 。 在内部,Spring Framework 使用 BeanPostProcessor 实现来处理它可以找到的任何回调接口并调用适当的方法。如果你需要自定义其他 Spring 默认不提供的功能或生命周期行为,可以自己实现

Python Web Flask源码解读(四)——全局变量

十年热恋 提交于 2019-11-29 05:40:27
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。 Github:https://github.com/hylinux1024 微信公众号:终身开发者(angrycode) Flask 中全局变量有 current_app 、 request 、 g 和 session 。不过需要注意的是虽然标题是写着全局变量,但实际上这些变量都跟当前请求的上下文环境有关,下面一起来看看。 current_app 是当前激活程序的应用实例; request 是请求对象,封装了客户端发出的 HTTP 请求中的内容; g 是处理请求时用作临时存储的对象,每次请求都会重设这个变量; session 是用户会话,用于存储请求之间需要保存的值,它是一个字典。 0x00 current_app 应用程序上下文可用于跟踪一个请求过程中的应用程序实例。可以像使用全局变量一样直接导入就可以使用 (注意这个变量并不是全局变量) 。 Flask 实例有许多属性,例如 config 可以 Flask 进行配置。 一般在创建 Flask 实例时 from flask import Flask app = Flask(__name__) app.config['SQLALCHEMY_TRACK

微服务之如何建模微服务

↘锁芯ラ 提交于 2019-11-29 05:08:02
1.什么样的服务是好的微服务? 它应该具备这 两个特点:松耦合、高内聚 松耦合 : 如果做到了服务之间的松耦合,那么修改一个服务就不需要修改另外一个服务了 。使用微服务最重要的一点是,能够独立修改和部署单个服务而不需要修改系统的其他部分,这一点非常重要。 那么相对的什么是紧耦合呢?使用紧耦合来做服务之间的集成,会使的一个服务的修改致使其消费者的修改。 一个松耦合的服务应该尽可能少的知道与之协作的那些服务的信息。 高内聚 : 我们希望 把相关的行为聚集在一起,把不相关的行为放在别处 。 因为如果你要改变某个行为的话,最好能够只在一个地方进行修改,然后就可以快速发布。如果你同时需要很多地方做修改,那么就可能同时发布多个微服务才能完成这个功能。这样的话,修改会变慢,部署服务的工作量和风险也会增大。 这就需要找到问题域的边界,从而确保相关的行为能放在同一个地方,并且它们会和其他边界以尽量松耦合的形式进行通信。 2.限界上下文 Eric Evans 的 《领域驱动设计》中,曾提到这个概念。 他认为, 任何一个给定的领域都包含多个限界上下文,每个限界上下文中的模型分成两部分,一部分不需要与外部通信,另一部分则需要 。 每个上下文都有明确的接口,该接口决定了它会暴露哪些模型给其他上下文。 2.1 共享的隐私模型 例如,对于MusicCorp来说,财务部门和仓库就可以是两个独立的限界上下文