runtime

轻松实现函数计算文件上传下载

拟墨画扇 提交于 2020-02-25 23:38:00
这是一个包含了 函数计算 每种 Runtime 结合 HTTP Trigger 实现文件上传和文件下载的示例集。每个示例包括: 一个公共 HTML 页面,该页面有一个文件选择框和上传按钮,会列出已经上传的文件,点击某个已上传的文件可以把文件下载下来; 支持文件上传、下载和列举的函数。 我们知道不同语言在处理 HTTP 协议上传下载时都有很多中方法和社区库,特别是结合函数计算的场景,开发人员往往需要耗费不少精力去学习和尝试。本示例集编撰的目的就是节省开发者甄别的精力和时间,为每种语言提供一种有效且符合社区最佳实践的方法,可以拿来即用。 当前已支持的 Runtime 包括: nodejs python php java 计划支持的 Runtime 包括: dotnetcore 不打算支持的 Runtime 包括: custom 使用限制 由于函数计算对于 HTTP 的 Request 和 Response 的 Body 大小限制均为 6M,所以该示例集只适用于借助函数计算上传和下载文件小于 6M 的场景。对于大于 6M 的情况,可以考虑如下方法: 分片上传 ,把文件切分成小块,上传以后再拼接起来; 借助于 OSS ,将文件先上传 OSS,函数从 OSS 上下载文件,处理完以后回传 OSS; 借助于 NAS ,将大文件放在 NAS 网盘上,函数可以像读写普通文件系统一样访问 NAS

Python调用C++之PYBIND11简介

夙愿已清 提交于 2020-02-25 21:52:50
简介 PyBind11是能够让C++和Python代码之间相互调用的轻量级头文件库。在这之前已经有了一个类似功能的库:Boost.Python。既然已经有了一个类似库,而且PyBind11的目的和语法都与Boost.Python相似,为什么还要重复造轮子?原因主要有以下亮点: Boost.Python为了兼容大多数C++标准和编译器,它使用了很多可以说是魔法的操作去解决问题而变得非常的臃肿; 目前很多编译器对C++11已经有很好的支持,而且C++11应用也比较广泛。 因此,PyBind11应运而生,他能在抛弃Boost.Python的负担同时又具备Boost.Python的简单操作。 使用 PyBind11的主要目的是将已有的C++代码接口暴露给Python去调用。例如, ONNX Runtime --一个用于ONNX格式的神经网络模型推理的引擎,其推理的核心模块是用C++写的,但是从易用性、Python AI 方面的主导地位等方面考虑,它需要将模型推理的接口暴露给Python。在之前的文章 ONNX Runtime 源码阅读:模型推理过程概览 中也有提到过。其接口暴露代码在$ONNX_RUNTIME/onnxruntime/python/onnxruntime_pybind_state.cc中。 将C++暴露给Python主要有两个大方向: 将函数暴露给Python;

轻松实现函数计算文件上传下载

梦想的初衷 提交于 2020-02-25 19:25:12
这是一个包含了 函数计算 每种 Runtime 结合 HTTP Trigger 实现文件上传和文件下载的示例集。每个示例包括: 一个公共 HTML 页面,该页面有一个文件选择框和上传按钮,会列出已经上传的文件,点击某个已上传的文件可以把文件下载下来; 支持文件上传、下载和列举的函数。 我们知道不同语言在处理 HTTP 协议上传下载时都有很多中方法和社区库,特别是结合函数计算的场景,开发人员往往需要耗费不少精力去学习和尝试。本示例集编撰的目的就是节省开发者甄别的精力和时间,为每种语言提供一种有效且符合社区最佳实践的方法,可以拿来即用。 当前已支持的 Runtime 包括: nodejs python php java 计划支持的 Runtime 包括: dotnetcore 不打算支持的 Runtime 包括: custom 使用限制 由于函数计算对于 HTTP 的 Request 和 Response 的 Body 大小限制均为 6M,所以该示例集只适用于借助函数计算上传和下载文件小于 6M 的场景。对于大于 6M 的情况,可以考虑如下方法: 分片上传 ,把文件切分成小块,上传以后再拼接起来; 借助于 OSS ,将文件先上传 OSS,函数从 OSS 上下载文件,处理完以后回传 OSS; 借助于 NAS ,将大文件放在 NAS 网盘上,函数可以像读写普通文件系统一样访问 NAS

19.Go语言基础之并发

感情迁移 提交于 2020-02-25 15:32:04
1.1并发与并行 并发:同一时间段执行多个任务(使用微信和多个朋友聊天) 并行:同一时刻执行多个任务(windows中360在杀毒,同时你也在写代码) Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。 goroutine是由Go语言的运行时(runtime)调度完成,而线程是由操作系统调度完成。 Go语言还提供channel在多个goroutine间进行通信。goroutine和channel是Go语言秉承的CSP(Communication Sequential Process)并发模式的重要实现基础。 1.2goroutine 在java/Python中,我们实现并发编程的时候,通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切需要耗费很多。 Go语言中的goroutine,类似于线程,但goroutine是由Go的运行时(runtime)调度和管理的。Go程序能够只能的将goroutine中的任务合理的分配到每个CPU。Go语言被称为现代化语言的原因,就是因为Go在语言层面就已经内置了调度和上下文切换的机制。 在Go语言编程中,不需要自己写进程、线程、协程,你的技能只有一个,就是goroutine。 1.2

Trying to optimize and understand runtime on a recursive function that prints divisors of a number

那年仲夏 提交于 2020-02-25 08:32:06
问题 The following is a recursive function that prints the divisors of a number (it has to be recursive). Without the commented out part, the program's worst case scenario are primes, the while loop will have to run all the way up to n, so the runtime would be: O(n). With the commented part, primes now run on O(sqrt(n)) but it becomes slower on numbers that aren't primes, but that for loop should make counting up to a divisor faster in any case. Can anyone explain why the runtime is slower? I've

Java JDK 版本不匹配解决办法

廉价感情. 提交于 2020-02-22 22:47:25
Java JDK 版本不匹配解决办法 有报错如下的 Error : A JNI error has occurred , please check your installation and try again Exception in thread "main" java . lang . UnsupportedClassVersionError : Main has been compiled by a more recent version of the Java Runtime ( class file version 53.0 ) , this version of the Java Runtime only recognizes class file versions up to 52.0 at java . lang . ClassLoader . defineClass1 ( Native Method ) at java . lang . ClassLoader . defineClass ( ClassLoader . java : 757 ) at java . security . SecureClassLoader . defineClass ( SecureClassLoader . java : 142 ) at java . net .

react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

帅比萌擦擦* 提交于 2020-02-22 20:34:07
react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目。文中针对react、webpack、babel、react-route、redux、redux-saga的核心配置会加以讲解,通过这个项目,可以系统的了解react技术栈的主要知识,避免搭建一次后面就忘记的情况。 从webpack开始 思考一下webpack到底做了什么事情?其实简单来说,就是从入口文件开始,不断寻找依赖,同时为了解析各种不同的文件加载相应的loader,最后生成我们希望的类型的目标文件。 这个过程就像是在一个迷宫里寻宝,我们从入口进入,同时我们也会不断的接收到下一处宝藏的提示信息,我们对信息进行解码,而解码的时候可能需要一些工具,比如说钥匙,而loader就像是这样的钥匙,然后得到我们可以识别的内容。 回到我们的项目,首先进行项目的初始化,分别执行如下命令 mkdir react-demo // 新建项目文件夹 cd react-demo // cd到项目目录下 npm init // npm初始化 引入webpack npm i webpack --save touch webpack.config.js 对webpack进行简单配置,更新webpack.config.js const path = require('path'); module

容器生态系统

这一生的挚爱 提交于 2020-02-21 11:32:56
1.容器的核心技术: (1)容器规范:由docker、coreos、google在内的若干公司共同成立了的OCI的组织,发布了runtime spec和image format spec两个规范,使得不同组织和厂商开发的容器能够在不同的runtime上运行,这样就保证了容器的可移植性和互操作性。 (2)容器runtime:runtime是容器真正运行的地方。runtime需要跟操作系统的内核紧密合作,为容器提供运行环境,容器只有在runtime中才可以运行。lxc、runc和rkt是目前主流的三种容器runtime,现在docker默认的是runc (3)容器管理技术:用户通过工具来管理容器。容器管理工具对内与runtime交互,对外为用户提供接口。lxd是lxc对应的管理工具,runc的管理工具是docker engine。docker engine包含后台的deamon和cli两个部分。一般提到的docker,指的就是docker engine (4)容器定义工具:容器定义工具允许用户定义容器的内容和属性,这样容器能够被保存、共享和重建 (5)registry:容器是通过image创建的,需要有一个仓库存放他们 (6)容器OS:容器OS是专门运行容器的操作系统,与常规系统想必,OS体积更小,启动更快,内核使用host的内核 2.容器平台技术 (1)容器编排引擎:通常包括容器管理

Go语言goroutine调度器初始化(12)

浪子不回头ぞ 提交于 2020-02-21 08:21:12
本文是《Go语言调度器源代码情景分析》系列的第12篇,也是第二章的第2小节。 本章将以下面这个简单的Hello World程序为例,通过跟踪其从启动到退出这一完整的运行流程来分析Go语言调度器的初始化、goroutine的创建与退出、工作线程的调度循环以及goroutine的切换等重要内容。 package main import "fmt" func main() { fmt.Println("Hello World!") } 首先我们从程序启动开始分析调度器的初始化。 在分析程序的启动过程之前,我们首先来看看程序在执行第一条指令之前其栈的初始状态。 任何一个由编译型语言(不管是C,C++,go还是汇编语言)所编写的程序在被操作系统加载起来运行时都会顺序经过如下几个阶段: 从磁盘上把可执行程序读入内存; 创建进程和主线程; 为主线程分配栈空间; 把由用户在命令行输入的参数拷贝到主线程的栈; 把主线程放入操作系统的运行队列等待被调度执起来运行。 在主线程第一次被调度起来执行第一条指令之前,主线程的函数栈如下图所示: 了解了程序的初始状态之后,下面我们正式开始。 程序入口 在Linux命令行用 go build 编译hello.go,得到可执行程序hello,然后使用gdb调试,在gdb中我们首先使用 info files 命令找到程序入口(Entry point

实战分析一个运行起来会卡死的Go程序

时光怂恿深爱的人放手 提交于 2020-02-21 08:20:27
序言 最近一位非常热心的网友建议结合demo来分析一下goroutine的调度器,而且还提供了一个demo代码,于是便有了本文,在此对这位网友表示衷心的感谢! 这位网友提供的demo程序可能有的gopher以前见过,已经知道了具体原因,但本文假定我们是第一次遇到这种问题,然后从零开始,通过一步一步的分析和定位,最终找到问题的根源及解决方案。 虽然本文不需要太多的背景知识,但最好使用过gdb或delve调试工具,了解汇编语言及函数调用栈当然就更好了。 本文我们需要重点了解下面这3个内容。 调试工具无法准确显示函数调用栈时如何找到函数调用链; 发生GC时,如何STOP THE WORLD; 什么时候抢占调度不会起作用以及如何规避。 本文的实验环境为AMD64 Linux + go1.12 Demo程序及运行现象 package main import( "fmt" "runtime" "time" ) func deadloop() { for { } } func worker() { for { fmt.Println("worker is running") time.Sleep(time.Second * 1) } } func main() { fmt.Printf("There are %d cores.\n", runtime.NumCPU()) goworker()